Jquery,在ajax请求头中没有X-Requested-With=XMLHttpRequest?
有时没有带标题的X-Requested-With,有时有 我查了firebug,发现了,不知道为什么 因此,当我在django中使用request.is_ajax时,它有时会失败 有人知道怎么修吗Jquery,在ajax请求头中没有X-Requested-With=XMLHttpRequest?,jquery,Jquery,有时没有带标题的X-Requested-With,有时有 我查了firebug,发现了,不知道为什么 因此,当我在django中使用request.is_ajax时,它有时会失败 有人知道怎么修吗 好吧,现在又发生了。 我打开网页,然后离开去吃晚饭,有很长一段时间,当我回来时,事情又发生了。我在firbugs中记录了请求标头: 请求使用X-Request-with: 主机localhost:8000用户代理Mozilla/5.0(Windows;U;Windows NT 5.2;zh CN;r
好吧,现在又发生了。 我打开网页,然后离开去吃晚饭,有很长一段时间,当我回来时,事情又发生了。我在firbugs中记录了请求标头: 请求使用X-Request-with: 主机localhost:8000
用户代理Mozilla/5.0(Windows;U;Windows NT 5.2;zh CN;rv:1.9.1.5)Gecko/20091102
Firefox/3.5.5
接受文本/html,/
接受语言zh cn,zh;q=0.5
接受编码gzip,放气
接受字符集GB2312,utf-8;q=0.7,*;q=0.7
保持活力300
使用XMLHttpRequest保持连接活动
X请求 Referer
http://localhost:8000/gallery/
Cookie xxx
不带X的请求-请求-带: 主机本地主机:8000
用户代理Mozilla/5.0(Windows;U; Windows NT 5.2;zh CN;rv:1.9.1.5) Gecko/20091102
Firefox/3.5.5 接受text/html、application/xhtml+xml、application/xml;q=0.9,/;q=0.8接受语言zh cn,zh;q=0.5接受编码gzip,放气
接受字符集GB2312,utf-8;q=0.7,*;q=0.7
保持活力300
连接保持活动状态
Referer
http://localhost:8000/gallery/
饼干xxx
提供更多信息。您提出了什么样的ajax请求 如果您提交的表单包含文件类型的输入字段,则很可能是缺少标题的原因 由于不能使用ajax提交文件,所有javascript框架都会在内部使用“隐藏iframe”技巧为您完成工作 用类似的问题和我的答案来检查这篇文章
否则,jQuery不应该有这样的行为,因为它总是设置头。如果问题与文件输入无关,请发布相关代码片段 来自jQuery源代码
xhr.setRequestHeader(“X-request-With”,“XMLHttpRequest”)代码>
也可以尝试将X-request-With作为Post值的一部分
var postData = "X-Requested-With=XMLHttpRequest&" + $("#myFormId").serialize();
$.post(
'http://www.mysite.com/blahblah',
postData,
function(data) { /*do whatever*/ },
'html'
);
并将其与。希望有帮助
编辑注释:
对不起,我不知道我在想什么。我发帖时一定是看错了问题。
这个问题是针对Python django框架的。不适用于ASP.NET MVC
我发布这个答案是因为ASP.NET MVC的行为基于以下源代码。
ASP.NET MVC源代码
查看ASP.NET MVC源代码中的AjaxRequestExtensions.cs类
公共静态类AjaxRequestExtensions
{
公共静态bool请求(此HttpRequestBase请求)
{
if(请求==null)
{
抛出新的ArgumentNullException(“请求”);
}
返回(请求[“X-request-With”]=“XMLHttpRequest”)||
((request.Headers!=null)和&(request.Headers[“X-request-With”]=“XMLHttpRequest”);
}
}
关于财产的MSDN文件
HttpRequestBase.Item属性
在派生类中重写时,从、或集合中获取指定的对象
因此,request[“X-request-With”]
将在以下所有位置查找该密钥:
- HTTP表单POST值
- HTTP Cookie
- HTTP请求查询字符串
- 和服务器变量
这样,如果你把我的JXQuery Ajax调用中包含的<代码> XMLHypRestRebug < /Cord>键值对作为HTTP POST的一部分,ASP.NET MVC将把HTTP请求看作是Ajax HTTP请求。
我自己也有同样的问题,我通过确保在我的URL后面有一个尾部斜线来修复它。因此,不是:
$.get('/example/url')
使用:
看起来你已经有一段时间没有发布这个了,但也许它会有所帮助 我在1.6.2版中也遇到了这个问题,尤其是当页面设置为空闲一段时间时。扩展jitter的答案,这是在一个地方为每个请求添加冗余的X-request-With。我把这个放在我的主页上。希望这能奏效
$(document).ajaxSend(function (event, request, settings) {
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
});
我之所以这样做,是因为我获取了一个附加了AJAX事件处理程序的元素,对其进行克隆,然后将新元素添加到文档中。出于某种原因,这意味着附加到新元素的事件不会将其视为普通的ajax请求(接受:text/html而不是application/json、no X-Requested-With等)
为了解决这个问题,我所做的只是将事件更改为jQuery的新等价物live()
(不确定他们现在叫它什么)。因此,来自:
$('a.basket-add').click(function() { /* etc */ });
致:
这可能不是答案,但我花了几个小时才发现我的错误是非常愚蠢的。(让我头疼的是,它在我的开发盒上工作,但不是在生产中,我仍然不明白为什么会这样,但是…)
确保事件处理程序确实已连接!如果没有X-request-With
标题,这可能是有充分理由的!我有一个表单,它的action属性是正确的url,我的提交按钮的“click”事件是说event.preventDefault()
,然后调用$.post(…)
,yadda-yadda。问题是,DOM元素被替换为其他一些xhr活动的结果,它的事件处理程序也被替换掉了。表单是作为普通的旧帖子提交的,而不是ajax,因此没有标题
所以,而不是
$('#my-submit-button').on("click", data, function(event) {
event.preventDefault();
$.post(/* etc */);
})
应该是这样的
$('#parent-div').on("click","#my-submit-button", function(event){
event.preventDefault();
$.post(/* etc */);
});
进一步阅读:我使用的是jquery.load(url)方法,以前使用其他方法时也遇到过这个问题。当这个问题发生时,我试图触发
$('#my-submit-button').on("click", data, function(event) {
event.preventDefault();
$.post(/* etc */);
})
$('#parent-div').on("click","#my-submit-button", function(event){
event.preventDefault();
$.post(/* etc */);
});