我正在使用带有Django后端的jQuery(1.4.2)并在Debian上使用Firefox(3.5.15)进行开发.我正在使用$ .ajax()将一些数据发布到我的服务器,这会将数据反映回浏览器.Firefox正在发送POST,然后立即在同一个URL上执行GET.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中?我可以提供哪些其他信息?
谢谢,克雷格
当我在标签中对值进行Ajax请求时,我遇到了类似的问题.
我的问题出现了,因为我在该表单上有一个动作(例如
如果这与您的情况相同,请尝试删除表单标记中的操作声明或return false;
在Ajax请求中包含语句.