jch*_*ung 13 django ajax jquery google-chrome-extension
上下文: chrome浏览器扩展使用JQuery从远程django应用程序请求响应.Django认识到请求是通过AJAX进行的,并以"Hello AJAX!"响应.我的练习基于这个很好的例子.因为此请求是通过chrome扩展进行的,所以请求是跨站点进行的,所以我@CSRF_exempt在Django视图中使用了装饰器.
问题:我的Django视图没有将请求识别为AJAX请求,而是响应Hello AJAX!它而不是响应Hello not AJAX!.
我的Django视图:(
网址/xhr_test使用以下视图)
@csrf_exempt
def check_login_extension(request):
if request.is_ajax():
message = "Hello AJAX!"
else:
message = "Hello not AJAX"
return HttpResponse(message)
Run Code Online (Sandbox Code Playgroud)
我的JQuery请求:
function xhrconnect() {
$.get("http://localhost:8000/xhr_test", function(data) {
document.getElementById('xhrmsg').innerHTML = (data);
});
}
Run Code Online (Sandbox Code Playgroud)
nra*_*itz 15
通过jQuery源代码,它看起来$.ajax()(因此$.get(),$.post()等等)会自动设置crossDomain选项,true如果它看到你正在发出跨域请求,你就是(相关代码).在实际的AJAX请求中,jQuery不会设置HTTP_X_REQUESTED_WITHDjango所需的标头(is_ajax()如果crossDomain已设置)(此处为相关代码).
我认为解决这个问题的最简单方法是明确设置crossDomain为false:
function xhrconnect() {
$.ajax({
url: "http://localhost:8000/xhr_test",
success: function(data) {
document.getElementById('xhrmsg').innerHTML = (data);
},
crossDomain: false
});
}
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,您可以尝试使用AJAX预过滤功能HTTP_X_REQUESTED_WITH在请求上手动设置标头.
| 归档时间: |
|
| 查看次数: |
7373 次 |
| 最近记录: |