Шаблон Django с jquery: обновление Ajax на существующей странице

У меня есть Google App Engine с формой. Когда пользователь нажимает кнопку отправки, вызывается операция AJAX, и сервер выводит что-то для добавления в конец той самой страницы, откуда она исходит. Как, у меня есть шаблон Django, и я собираюсь использовать jquery. У меня есть следующая точка зрения:

<html>
<head>
<title></title>
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript" src="scripts/scripts.js"></script>

</head>
<body>
welcome
<form id="SubmitForm" action="/" method="POST"> 
<input type="file" name="vsprojFiles" />
<br/>
<input type="submit" id="SubmitButton"/>
</form>

<div id="Testing">
{{thebest}}
</div>

</body>
</html>

Вот скрипт в scripts.js:

$(function() {
    $("#SubmitForm").click(submitMe);
});

var submitMe = function(){
    //alert('no way');
    var f = $('#SubmitForm');
    var action = f.attr("action");
    var serializedForm = f.serialize();
  $.ajax( {
        type: 'post',
        data: serializedForm,
        url:  form_action,
        success: function( result ) {
          $('#SubmitForm').after( "<div><tt>" +
                                     result +
                                     "</tt></div>" );
        }
      } );

    };

И вот мой код контроллера:

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext import db
from google.appengine.ext.webapp import template
from google.appengine.api.urlfetch_errors import *
import cgi
import wsgiref.handlers
import os
import sys
import re
import urllib
from django.utils import simplejson

class MainPage(webapp.RequestHandler):
    def get(self):
        path = os.path.join(os.path.dirname(__file__), 'Index.html')
        template_values={'thebest': 'thebest'}
        tmplRender =template.render(path, template_values)
        self.response.out.write(tmplRender)
        pass

    def Post(self):
        print >>sys.__stderr__,'me posting'
        result = 'grsgres'
        self.response.out.write(simplejson.dumps(result))

Как видите, когда пользователь нажимает кнопку отправки, вызывается метод контроллера Mainpage.post.

Теперь я хочу отобразить содержимое переменной «результат» сразу после формы, как мне это сделать?


person Graviton    schedule 16.10.2008    source источник


Ответы (2)


Каковы ваши результаты без возможности протестировать код? Вы проверили результаты, возвращенные вызовом AJAX? Я бы посоветовал вам запустить Firefox с Firebug и зарегистрировать результаты AJAX в консоли Firebug, чтобы увидеть, что вы получите:

//...
        success: function( result ) { 
        console.log( result );
      $('#SubmitForm').after( "<div><tt>" + 
// ...

Вы также можете использовать сетевую панель Firebug, чтобы увидеть, что передается туда и обратно.

Кроме того, к чему приводит «simplejson.dumps (результат)»?

person Seamus    schedule 05.11.2008

вот пример моей функции успеха

success: function(json){
                $('#gallons_cont').html(json['gallons']);
                $('#area_cont').html(json['area']);
                $('#usage_cont').html(json['usage'])
                $('#results_json').show('slow');            
            },

обратите внимание, что вам нужно отлаживать с помощью firebug или чего-то подобного, так как может возникнуть проблема с сериализацией, которая вызовет ошибку, но не будет отображаться, если вы не используете что-то вроде firebug или реализуете ошибку .ajax.

person Rasiel    schedule 07.05.2009