Javascript jquery ajaxForm插件中未设置X-Requested-With标头
我正在使用将ajax提交到我的CakePHP应用程序 Cake的RequestHandler通过查看“X-Requested-With”头来检测ajax请求,但forms插件似乎没有设置它。或者jQuery在使用插件时没有设置它 我试过几种方法 在主onload函数中,我添加了:Javascript jquery ajaxForm插件中未设置X-Requested-With标头,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在使用将ajax提交到我的CakePHP应用程序 Cake的RequestHandler通过查看“X-Requested-With”头来检测ajax请求,但forms插件似乎没有设置它。或者jQuery在使用插件时没有设置它 我试过几种方法 在主onload函数中,我添加了: $.ajaxSetup({ headers: {"X-Requested-With":"XMLHttpRequest"} }); 在插件代码中,我在实际的ajax调用之前添加了以下内容: options.be
$.ajaxSetup({
headers: {"X-Requested-With":"XMLHttpRequest"}
});
在插件代码中,我在实际的ajax调用之前添加了以下内容:
options.beforeSend = function(xhr) {
xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest");
};
进行常规ajax调用时,会设置标头
有谁能告诉我发生了什么或最重要的事情,我该如何解决这个问题吗?根据petersendidit的评论,我开始搜索ajax/文件上传问题 关于它有一个有趣的问题,就是说这是不可能的,只有通过使用iFrame的黑客攻击。所以没有实际的ajax调用 由于我的表单是一个带有文件上传的多部分,因此该插件使用iframe技术而不是常规的ajax调用
为了解决这个问题,要知道这应该类似于ajax调用,我将在多部分表单上添加一个隐藏的输入字段…@Nicky De Maeyer对他自己问题的回答 实际上,您不需要自己做这件事(附加一个隐藏的输入字段) 好的,您可以将这些数据传递给options对象中的ajaxForms插件
$('#myForm1').ajaxForm({data:{"X_REQUESTED_WITH":"XMLHttpRequest"}});
提交时是否应自动(在隐藏的iframe文件上载案例中)将此类输入附加到表单
<input type="hidden" name="X_REQUESTED_WITH" value="XMLHttpRequest" />
我今天不得不处理一个类似于此的问题,并提出了一个不同的解决方案。Chrome、Safari和IE出现了标题不匹配的问题(我在PHP中通过
$\u服务器['HTTP\u X\u REQUESTED\u with']='XMLHttpRequest'
)
正如前面的回答中所述,当使用jQueryAjax函数时,jQuery已经设置了这个头
在上述浏览器中,当使用:
options.beforeSend = function(xhr) {
xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest");
};
那些浏览器(不是Firefox)会将其附加到标题中。所以实际上,头被设置为:“XMLHttpRequest,XMLHttpRequest”
总之,在使用jQueryAjax函数时不要设置此标题。希望这能解决一些人的头痛 新发展:
到目前为止,now以跨浏览器兼容的方式很好地支持多部分(包括文件)上载,并设置X-Requested-With标头。我在jquery.form的旧版本中遇到了这个问题,升级到3.02修复了它 我发现问题在于插件的旧版本不支持文件上传。当我删除文件输入时,问题就消失了。jQuery将在ajax调用中添加X-request-With-XMLHttpRequest头,ajaxForms插件使用jquerys ajax函数进行ajax调用。我唯一能看到它没有被发送的时候是,如果你正在用ajaxForms pluginit进行文件上传,那么它是idd一个多部分表单。。。为什么它会这样做,这可以被修复吗?只是作为一个侧面,不适合使用ASP.NET MVC的人。MVC区分大小写,除非名称为“X-Requested-With”。或者只添加
xhr.setRequestHeader(“X_Requested_With”,“XMLHttpRequest”)代码>