![](/img/trans.png)
[英]XMLHttpRequest not adding header - “X-Requested-With: XMLHttpRequest”
[英]X-Requested-With header not set in jquery ajaxForm plugin
我正在使用jQuery ajaxForms插件使ajax提交到我的CakePHP應用。
Cake的RequestHandler通過查看“ X-Requested-With”標頭來檢測Ajax請求,但表單插件似乎並未對其進行設置。 或jQuery在使用插件時未設置它。
我已經嘗試了幾件事,
在主要的onload函數中,我添加了:
$.ajaxSetup({
headers: {"X-Requested-With":"XMLHttpRequest"}
});
在插件代碼中,我在實際的ajax調用之前添加了此代碼:
options.beforeSend = function(xhr) {
xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest");
};
進行常規的ajax調用會設置標頭...
誰能告訴我發生了什么或最重要的是,我該如何解決?
@Nicky De Maeyer對自己問題的回答
實際上,您不需要自己執行此操作(附加一個隱藏的輸入字段)。
AFAIK,您可以將這些數據傳遞給options對象中的ajaxForms插件
$('#myForm1').ajaxForm({data:{"X_REQUESTED_WITH":"XMLHttpRequest"}});
應該自動(在隱藏的iframe文件上傳情況下)在提交時將此類輸入附加到您的表單中
<input type="hidden" name="X_REQUESTED_WITH" value="XMLHttpRequest" />
新發展:
截至目前, jquery.form插件現在以跨瀏覽器兼容的方式很好地支持多部分(包括文件)上載,並設置了X-Requested-With標頭。 我在使用舊版本的jquery.form時遇到了這個問題,並升級到3.02修復了該問題!
根據petersendidit的評論,我去搜索ajax /文件上傳問題。
因此有一個有趣的問題,那就是說不可能,只能通過使用iFrame進行破解。 所以沒有實際的ajax調用...
由於我的表單包含文件上傳功能,因此該插件使用iFrametechnique而不是常規的ajax調用...
為了解決這個問題,我知道它應該類似於ajax調用,我將在多部分表單上添加一個隱藏的輸入字段...
我發現問題是在較舊版本的插件中缺少對文件上傳的支持。 當我刪除文件輸入時,問題就消失了。
我今天只需要處理一個與此類似的問題,並提出了不同的解決方案。 這個問題來自Chrome,Safari和IE,其中的標頭(我通過$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'
在PHP中檢查)不匹配。
正如前面的答案中概述的那樣,當使用jQuery ajax函數時,此標頭將由jQuery設置。
在上述瀏覽器中,使用時:
options.beforeSend = function(xhr) {
xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest");
};
這些瀏覽器(不是Firefox)會將其附加到標題中。 因此,實際上,標頭設置為:'XMLHttpRequest,XMLHttpRequest'
最重要的是,在使用jQuery AJAX函數時不要設置此標頭。 希望這可以解決某人的頭痛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.