Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery ajaxForm插件中未设置X-Requested-With标头_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript jquery ajaxForm插件中未设置X-Requested-With标头

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

我正在使用将ajax提交到我的CakePHP应用程序

Cake的RequestHandler通过查看“X-Requested-With”头来检测ajax请求,但forms插件似乎没有设置它。或者jQuery在使用插件时没有设置它

我试过几种方法

在主onload函数中,我添加了:

$.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”)