Проблема Джанго с методом POST - PullRequest
0 голосов
/ 28 мая 2011

У меня проблема с использованием данных POST вместо данных GET с Django.

Вот мой упрощенный класс urlpatterns:

urlpatterns = patterns('',
    ('^hello/$', hello),
    ('^hello/ajax_info/$', ajax_info),   
)

И у меня есть это представление в views.pyfile:

def ajax_info(request):
    if request.method == "POST":
        print "This is a post"
    # do stuff    

Веб-страница, обслуживаемая при просмотре / hello /, содержит следующий javascript:

    function loadXMLDoc(name) {
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.onreadystatechange=function(){
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
                //window.onload()

            }
        }

        // GET method
        //parm = values
        //xmlhttp.open("GET",name+"?q="+parm, true);
        //xmlhttp.send();

        // POST method
        parms = "data=" + values
        xmlhttp.open("POST", "ajax_info", false);
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
        xmlhttp.send(parms)
    } // end function loadXMLDoc

(на веб-странице у меня есть кнопка, вызывающая loadXMLDoc () для вызова при нажатии)

Если я раскомментирую «метод GET» в javascript и закомментирую «метод POST», то будет вызвано мое представление django.

Ноесли я закомментирую «метод GET» и использую код «метод POST», то мой зритель даже не будет вызван.И сервер разработки django возвращает это:

[28/May/2011 00:15:06] "POST /hello/ajax_info HTTP/1.1" 500 69236

Я что-то упускаю из виду?Примеры показывают, что мой запрос должен попасть к моему зрителю, даже если это POST.

Ответы [ 4 ]

2 голосов
/ 28 мая 2011

Я считаю, что проблема в том, что ваш метод представления ничего не возвращает ... Попробуйте перейти на страницу / hello / ajax_info / и проверьте, все ли работает правильно!

Если это так, вы будетеполучите, с DEBUG = True, эту ошибку: «Представление ... не возвращало объект HttpResponse.»

Также убедитесь, что вы используете тег «csrf_token», если вы что-то размещаете ...Печенье должно быть включено!

2 голосов
/ 28 мая 2011

Ваша проблема в том, что вы не понимаете, как отлаживать ajax в браузере.

Прочтите это http://wiki.pylonshq.com/display/pylonscookbook/Debugging+AJAX+requests+using+Firebug и затем используйте эту технику, чтобы найти, что именно нарушает ваш AJAX-вид.

2 голосов
/ 28 мая 2011

Я не знаком с django, но это 500 точно похоже на код состояния HTTP, указывающий, что ваш ответ был плохим.Возможно, посмотрите, что происходит с отладчиком JavaScript: Firebug, инструменты Chrome, Opera Dragonfly и т. Д.

Кстати, вы можете использовать такую ​​библиотеку, как jQuery, для клиентского кода.Ручной Аякс - это сильная головная боль.

1 голос
/ 28 мая 2011

Я помню, что в какой-то момент у меня возникла проблема, когда POST и ajax не работали должным образом, когда я принудительно завершил URL-адрес символом "/". Полагаю, стоит попытаться удалить его.

urlpatterns = patterns('',
    ('^hello/$', hello),
    ('^hello/ajax_info$', ajax_info), # Removed ending slash   
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...