Django / AJAX / JQuery - простые проблемы с POST - PullRequest
0 голосов
/ 17 июля 2011

Я пытаюсь реализовать простейший AJAX POST, о котором я могу подумать, потому что я новичок в AJAX и JQuery. Идея такова: у меня есть кнопка, и когда она нажата, я хочу отправить основные данные POST на ту же страницу (страница: http://{{ мой IP-адрес}} / django / ajax /).

В моем файле .html у меня есть:

<script type="text/javascript">
    function pythonizer(){
        $("#msgid").append("it SHOULD post after this is appended");
        $.ajax({ 
        url: '/django/ajax/', 
        type: 'POST', 
        data: {'obj': "test string"}, 
        dataType: 'json', 
        contentType: "application/json; charset=utf-8",
        success: function(response) {
                   alert(response);
            }
        }); 
        }
</script>    

<div id="msgid">
</div>

<input type="button" id="myButton" value="click me" onclick="pythonizer()" />

И моя соответствующая функция в view.py:

def ajax(request):
    if request.method == 'POST':
        return HttpResponse("Hello AJAX")   

    return render_to_response('huh.html', {})

Просто, верно? Проблема, однако, заключается в том, что когда я нажимаю кнопку, «ДОЛЖНО быть опубликовано после добавления» успешно добавляется в div, но больше ничего не происходит, HttpResponse («Hello AJAX») не возвращается, POST не за работой!

То, что я написал, кажется, согласуется с документацией, которую я прочитал, но у меня есть ощущение, что я либо упускаю что-то глупое, либо пытаюсь упростить POST. Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 17 июля 2011

Я не знаю django или python, но проблема с вашим javascript в том, что он ничего не делает, когда завершается вызов AJAX.

<script type="text/javascript">
function pythonizer(){
    $("#msgid").append("it SHOULD post after this is appended");
    $.ajax({ 
    url: '/django/ajax/', 
    type: 'POST', 
    data: {'obj':data},   // <-- possible error?
    dataType: 'json', 
    contentType: "application/json; charset=utf-8",  
    success: function (response) {
        alert(response);
    }
    }); 
    }
</script>

Это предупредит все, что вы напишете в ответ (предположительно "Hello AJAX").

Кроме того, в вашем скрипте есть ошибка: вы не определили «данные» (как в data: {'obj':data},). этот сценарий не будет выполняться как есть, если вы не объявили data в другом месте.

0 голосов
/ 28 июня 2013

Я предполагаю, что вы хотите получить ответ JSON.

В документе jquery объясняются различные типы данных, которые можно использовать.Когда используется dataType:'json', метод ajax ожидает, что тип контекста ответа будет в JSON.

В html-файле шаблона попробуйте следующее:

<script type="text/javascript">
function pythonizer(){
    var data = "data";
    $("#msgid").append("it SHOULD post after this is appended");
    $.ajax({ 
        url: '/django/ajax/', 
        type: 'POST', 
        data: {obj:data},
        dataType: 'json', 
        contentType: "application/json; charset=utf-8",  
        success: function (response) {
            alert(response);
        }
        error:function(){
            alert("failure");
        }
    }); 
}
</script>

Попробуйте это в ваших представлениях.py:

import json
from django.http import HttpResponse

def ajax(request):
    if request.method == 'POST':
        return HttpResponse({'message':'Hello Ajax'}, content_type = "application/json")
0 голосов
/ 18 июля 2011

Может быть здесь ошибка?

    success: function(response) 

Я не могу рассказать вам больше без отладочной информации ... Питон вообще получает запрос?Возможно, проблема в том, что он отклоняет проверку CSRF, и вам нужно добавить и импортировать ее:

@csrf_exempt
def myview(request):
    print 'hello'

, возможно, вы могли бы прочитать об этом подробнее здесь: https://docs.djangoproject.com/en/1.2/releases/1.2.5/#csrf-exception-for-ajax-requests

Может быть, лучше несначала зайдите так глубоко ИМХО?

Так почему бы вам не использовать другой ярлык jQuery?

$.post('/django/ajax/', data, function(data){
                                 alert(data);
                              });

Может быть, я ошибаюсь с вашим личным кодом, но я думаю, вы просторазберитесь с официальной помощью здесь: http://api.jquery.com/jQuery.post/

Для этого есть две хорошие вещи:

  1. Firebug (Mozilla Firefox и, возможно, некоторые другие браузеры тоже хороши)
  2. Панель инструментов Django Debug

Они хороши для отладки как в Python, так и в JQuery ... Попробуйте научиться их использовать ... (если вы этого еще не сделали, и яизвините, что сказал вам такую ​​очевидную вещь в этом случае :))

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