Джанго: Что не так с моим простым экспериментом AJAX? - PullRequest
2 голосов
/ 09 марта 2010

Я пытаюсь понять, как работают вызовы Django + Jquery и Ajax.

Это просто / test / url, который показывает одну форму ввода, после отправки получает ответ с сервера через ajax.

Для этого я написал очень маленькое представление:

def test(request):
    if request.is_ajax():
        from django.http import HttpResponse
        post_text = request.POST.get("post_data")
        return HttpResponse("{'response_text': '"+post_text+" recieved.'}", mimetype="application/json")
    else:
        return render_to_response('test.html', {},context_instance =RequestContext(request))

И я написал это правило для URL в свой urlpattern по адресу urls.py:

.
(r'^test/$', 'myapp.views.test'),

А вот мой шаблон test.html:

<html>
  <head><title>template</title></head>

  <script type="text/javascript" src="/media/js/jquery.js"></script>

  <script type="text/javascript">
    $(document).ready(function() {
        $('#post_form').submit(function(event){
            event.preventDefault(); // cancel the default action
            var form = this;
            var data = {}
            data.post_data = $(form).find('input[@name=our_text]').val();

            $.post("/test/", 
                data, 
                function(responseData) {
                  alert(responseData.response_text);
                },
                "json"
            );
        });
    });
  </script>

  <body>
    <form id="post_form" method="post">
      INPUT: <input type="text" name="our_text" />
      <input type="submit" value="Add" />
    </form>
  </body>
</html>

Похоже, он не отвечает на мой www.mysite.com/test/, когда я заполняю поле ввода и отправляю. В чем может быть проблема?

Ответы [ 2 ]

5 голосов
/ 09 марта 2010

jQuery 1.4 не будет анализировать недопустимый JSON. Как отметил Алекс Гейнор, ваш JSON недействителен, поскольку использует одинарные, а не двойные кавычки.

Написание JSON вручную - глупо. Используйте библиотеку для преобразования типов данных Python в JSON. Опять же, как упомянул Алекс, Django уже отправил вам простой джейсон. Кроме того, если вы используете Python2.6 или более позднюю версию, json является частью стандартной библиотеки http://docs.python.org/library/json.html

from django.http import HttpResponse
from django.utils import simplejson

def test(request):
    if request.is_ajax(): 
        post_text = request.POST.get("post_data")
        response_dict = {'response_text': '"+post_text+" recieved.'}
        return HttpResponse(simplejson.dumps(response_dict), mimetype="application/json")
    else:
        return render_to_response('test.html', {},context_instance =RequestContext(request))
4 голосов
/ 09 марта 2010

Ключи JSON для объектов (словарей) должны заключаться в кавычки с использованием двойных кавычек ", а не одинарных кавычек". Вам действительно следует использовать настоящую библиотеку JSON, такую ​​как simplejson (входит в django на django.utils.simplejson), чтобы сгенерировать ваш JSON .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...