jQuery ajax POST вызывает немедленный GET на тот же URL - PullRequest
3 голосов
/ 22 ноября 2010

Я использую jQuery (1.4.2) с бэкэндом Django и делаю свою разработку с Firefox (3.5.15) на Debian. Я использую $ .ajax () для публикации некоторых данных на моем сервере, которые отражают данные обратно в браузер. Firefox отправляет POST, а затем немедленно выполняет GET для того же URL. Откуда этот GET? Я не хочу, чтобы это случилось.

Код, который я использую для POST, выглядит следующим образом:

$.ajax({
    type: 'POST',
    url: '/edit_value/',
    data: JSON.stringify(data_to_post),
    success: function(updated) {
        alert('success');
    },
    error: function(request, description, exception) {
        alert('error');
    },
    async: false,
    dataType: 'json'
});

Я вижу сообщение об успехе, а не сообщение об ошибке. Просматривая логи моего сервера, я правильно возвращаю data_to_post.

Я смотрел tcpdump и вижу запрос POST. Выглядит именно так, как я и ожидал:

POST /edit_value/ HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.15) Gecko/20101028 Iceweasel/3.5.15 (like Firefox/3.5.15)
Accept: application/json, text/javascript, */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost:8000/
Content-Length: 30
Cookie: csrftoken=9e3edd79a51956f088f4a505ca1b4282; sessionid=80d72430f4682632ccfb8dc8047b7d17
Pragma: no-cache
Cache-Control: no-cache

[{"id":"161","value":"988.0"}]

Ответ тоже выглядит нормально:

HTTP/1.0 200 OK
Date: Mon, 22 Nov 2010 07:28:44 GMT
Server: WSGIServer/0.1 Python/2.6.6
Vary: Cookie
Content-Type: text/json

[{"id":"161","value":"988.0"}]

Если для async установлено значение true, иногда браузер прерывает TCP-соединение раньше, иногда запрос / ответ завершается. Если для параметра async установлено значение false, запрос / ответ всегда завершается (для приведенного выше примера было установлено значение false). Firefox немедленно отправляет GET.

GET /edit_value/ HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.15) Gecko/20101028 Iceweasel/3.5.15 (like Firefox/3.5.15)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost:8000/
Cookie: csrftoken=9e3edd79a51956f088f4a505ca1b4282; sessionid=80d72430f4682632ccfb8dc8047b7d17

Откуда этот GET? Как я могу перехватить его в Firebug до перезагрузки страницы? Какую другую информацию я могу предоставить?

Спасибо, Craig

Ответы [ 3 ]

6 голосов
/ 22 ноября 2010

У меня была похожая проблема, когда я выполнял Ajax-запрос значений в теге <form>.

Моя проблема возникла из-за того, что у меня было действие в этой форме (например, <form action="mypage.aspx"...), что - дажехотя Ajax POST успешно выполнялся - вызывал отправку формы.

Если это не отличается от вашей ситуации, попробуйте либо удалить объявление действия в теге формы, либо включить оператор return false; в свой Ajax.запрос.

0 голосов
/ 30 октября 2014

Вместо возврата false, использование e.PreventDefault делает именно то, что требуется.В этом случае действие гиперссылки по умолчанию состояло в том, чтобы перенаправить, следовательно, вызывая get.С помощью оператора e.preventDefault () все получится (ПРИМЕЧАНИЕ: e - это объект события, который передается в качестве параметра функции)

0 голосов
/ 22 ноября 2010

Вы должны включить оператор return false; в запрос Ajax, как сказал вам Фил.

Я просто хочу предложить хорошее приложение, которое может помочь вам в отладке Ajax:

Веб-сайт Selenium

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