簡體   English   中英

jQuery ajaxForm插件中未設置X-Requested-With標頭

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM