Ajax Post в рамках Django? - PullRequest
       5

Ajax Post в рамках Django?

5 голосов
/ 15 марта 2011

Я собрал простой тест поста ajax / jquery в рамках django, но не совсем понимаю, почему вывод не попадает на страницу шаблона. Кто-нибудь?

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

Я полный новичок в ajax / jquery / django, поэтому прошу прощения за мое невежество :)

В конечном итоге я хотел бы передать произвольные переменные, не связанные с формой, в представление django через jquery. Возможный? Спасибо:)

Вот код -

test.html:

<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script></javascript>
<script type="text/javascript">
   $(document).ready(function() {
       $("#testForm").submit(function(event){
           event.preventDefault();
           $.ajax({
                type:"POST",
                url:"/test_results/"
                    });
       });
       return false;
    });
</script>
</head>
<body>
        <form id="testForm" action="/test_results/" method="post">
            <input type="submit" id="go" name="go" value="Go!">
        </form>
</body>
</html>

views.py:

from django.shortcuts import render_to_response
from django.http import HttpResponse


    def test_ajax(request):
        if request.is_ajax():
            message = "Yes, AJAX!"
        else:
            message = "Not Ajax"
        return HttpResponse(message)
        #alternative test: return render_to_response('test_results.html')

urls.py:

(r'^test_results/$', views.test_ajax),
(r'^test/$', views.test),

и почти пустой test_results.html:

<html>
<head>
</head>
<body>
test results
</body>
</html>

Ответы [ 2 ]

5 голосов
/ 15 марта 2011

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

Если вы получаете ответ, вы получаете ответ.Ты просто ничего с этим не делаешь.

Почему бы не предупредить данные и добавить их к <body>, например:

$.ajax({
     type:"POST",
     url:"/test_results/",
     data: {
            'arbitrary-data': 'this is arbitrary data',
            'some-form-field': $("myform input:first").val(), // from form
            'background-color': $("body").css("background-color")
            // all of this data is submitted via POST to your view.
            // in django, request.POST['background-color'] 
     },
     success: function(data){
         alert(data);
         $("body").append(data);
     }
});
3 голосов
/ 15 марта 2011

Вам необходимо добавить обработчик для ответа, возвращаемого представлением:

$.ajax({
    type:"POST",
    url:"/test_results/",
    dataType: "json",
    success: function(json)
    {
        //specifying a dataType of json makes jQuery pre-eval the response for us
        console.log(json.message);
    }
 });

Возможно, вы также захотите закодировать ответ как JavaScript в вашем представлении:

try:
    import json
except ImportError:
    import simplejson

def my_view(request):
    if request.is_ajax():
        return HttpResponse(json.dumps({'message' : 'awesome'},
            ensure_ascii=False), mimetype='application/javascript')

Надеюсь, это поможет вам!

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