我正在使用Django + jQuery测试ajax.我的意见中有这个:
def ajax_test(request):
if request.is_ajax():
message = "This is ajax"
else:
message = "Not ajax"
return HttpResponse(message)
Run Code Online (Sandbox Code Playgroud)
这在我的模板中:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="{{ STATIC_URL }}js/jquery-1.6.4.js"></script>
</head>
<body>
<script>
$.get("/ajax_test", function(data) {
alert(data);
});
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 为什么这会将"Not ajax"返回到我的html页面?
anh*_*ran 18
我不知道你发生了什么事.我测试并得到了一个好消息:This is ajax.我的代码:
urls.py
url(r'^$', 'myapp.views.home', name='home'),
url(r'^ajax_test/$', 'myapp.views.ajax_test', name='ajax_test'),
Run Code Online (Sandbox Code Playgroud)
views.py
def home(request):
return render_to_response('home.html', {},
context_instance=RequestContext(request))
def ajax_test(request):
if request.is_ajax():
message = "This is ajax"
else:
message = "Not ajax"
return HttpResponse(message)
Run Code Online (Sandbox Code Playgroud)
模板/ home.html做为
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function () {
$.get("/ajax_test/", function (data) {
alert(data);
});
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
ogu*_*ets 12
看起来is_ajax只是检查HTTP_X_REQUESTED_WITH标题.如果它等于X-Requested-With,我们有一个ajax查询.
所以现在很容易追踪这个标题的命运:
查看初始HTTP请求(使用浏览器的调试插件,Wireshark,tcpdump或您喜欢的任何其他工具)并查看它是否具有正确的XMLHttpRequest标头.如果没有,问题在于jQuery(或您的脚本).
在重定向期间,标题可能会丢失,正如丹尼尔罗斯曼所说(我自己没有看过,但几乎可以肯定它是可能的).在这种情况下,您将看到两个(或更多)链式HTTP请求,其中一个将缺少HTTP_X_REQUESTED_WITH标头.在这种情况下,问题可能出在webserver的配置或重定向本身(如果代码生成重定向响应,您可能必须摆脱它或手动中继标头).
此外,HTTP代理可以剪切标头.在这种情况下,您可以通过流量检查器查看服务器端的HTTP请求,或者HTTP_X_REQUESTED_WITH(环境变量很乱,但HTTP标头也在那里).