为什么ajaxSubmit没有使用X-Requested-With = XMLHttpRequest请求头发送正确的ajax请求

我google了很多,但我找不到任何解决方案

我正在使用jQueryUI Dialog和ajaxSubmit通过模式对话框和Ajax发送数据(文件和其他)。

我的问题很简单:数据被正确发送到服务器但不是通过ajax,即没有请求头属性X-Requested-With=XMLHttpRequest

那么我做错了什么或有任何已知的问题呢?

这是我的代码的一些片段。

 $('#photo-dlg').dialog({ modal: true, open: function() { $(this).load("/mywebsite/mydialog");} //importing 
... buttons: { 'cancel' : function() {$(this).dialog('close');}, 'submit' : function() { $('#formid').ajaxSubmit({ dataType: "json", success: function (data) { $('#photo-dlg').dialog('close'); }) });} });

顺便说一下,我尝试过以下选项:

 headers: {"X-Requested-With":"XMLHttpRequest"} //OR data: {"X-Requested-With":"XMLHttpRequest"} //OR beforeSend: function(xhrObj) {xhrObj.setRequestHeader("X-Requested-With", "XMLHttpRequest")} 

没有任何成功

更新:
您可以将以下代码复制/粘贴到html页面中,并通过FireBug自行尝试(=>无X-Requested-With标头)

          
$('#photo-dlg2').dialog({ modal: true, buttons: { 'submit' : function() { $('#updatePhoto2').ajaxSubmit({ dataType: "json", success: function (data) { alert(data['status']); } }); }} });

我已经被这个漏洞击中了。 我知道你能感受到多么孤独:-)

我一直在寻找几个星期。 有时我有XMLHttpRequest标题,有时我没有。 所以这可能不是一个明确的解决方案,但这对我有用。

我像你一样测试了标题,我测试了ajax设置也在改变。 直到…完整的JavaScript语法清理我的代码没有任何工作。 经过一些IE6测试后,似乎有些’;’ (或者它是’,’?没有 – 在我写的时候闭嘴 – 它是’;’)在一些关键点上丢失了,并且任何现代浏览器都没有受到影响……或者至少看起来它们没有受到影响。 IE6完全被破坏,所以我们发现了语法问题(顺便说一下 – 或者可能通过Dichotomy更为现实)。

我记不清楚了(在长篇链接结尾处的情节之间是什么?)但是在我受到这个错误影响的每个地方我都会默默地忽略一些语法错误。 并且肯定jQuery变坏了(就像ajax设置被清除一样)。 这是我生命中唯一一次得到IE6错误的时候:-)

好吧,我花了一段时间,但我终于找到了答案: 没有解决方案!

实际上似乎jquery表单插件无法使用浏览器的XMLHttpRequest对象上传文件 ,

实际上我已尝试在插件网站上给出示例,实际上,如果您在表单中添加 ,则标题X-Requested-With = XMLHttpRequest永远不会发送到服务器并且如果您的请求是Ajax请求,则您的服务器无法使用常规方法进行检测。

很高兴知道并感谢您的帮助。

这可能对某人有帮助。

我想我知道问题何时发生。 当您使用IE 7,8或9(显然……),并且您尝试使用ajaxform上传文件时(我认为ajaxsubmit会发生同样的事情),这就是问题发生的时候。

IE不发送X-Requested-With=XMLHttpRequest标头。 Chrome会发送此标头,也会发送Firefox。

在Javascript中定义对象时,需要注意逗号。 您的代码遗失了一个。

 $('#photo-dlg').dialog({ modal: true, open: function() { $(this).load("/mywebsite/mydialog");}, // you had a missing comma here. //importing 
... buttons: { 'cancel' : function() {$(this).dialog('close');}, 'submit' : function() { $('#formid').ajaxSubmit({ dataType: "json", success: function (data) { $('#photo-dlg').dialog('close'); }) });} });

但这可能不是你问题的原因。

当我不小心在页面上放置了两个具有相同ID的表单时,IE 10停止了我的http标头(X-Requested-With = XMLHttpRequest)。

我知道这已经过时了,但当我在搜索问题时,谷歌的前五名结果出现了。