2011-01-07 50 views
3

我用Google搜索了很多,但我沒有找到任何解決方案爲什麼ajaxSubmit會不會發送正確的Ajax請求使用X-要求,隨着= XMLHttpRequest的請求頭

我使用jQueryUI DialogajaxSubmit用於發送數據(文件和其他)通過模態對話框和Ajax。

我的問題很簡單:數據被正確地發送到服務器,而不是通過AJAX即沒有請求頭屬性X-Requested-With=XMLHttpRequest

所以,我該怎麼辦錯或有任何已知的問題,這件事嗎?

這是我的代碼的一些片段。

$('#photo-dlg').dialog({ 
    modal: true, 
    open: function() { $(this).load("/mywebsite/mydialog");} 
    //importing <form id="formid" method="post" name="updatePhoto" enctype="multipart/form-data"> ... 
    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")} 

沒有任何成功

UPDATE:
您可以複製/粘貼下面的代碼到HTML頁面,並通過嘗試你自己通過FireBug(=> No X-Requested-With header)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js"></script> 
    <script type="text/javascript" src="http://d23fbyuk1dcxop.cloudfront.net/js/jquery/jquery.multiselect-1.8.min.gz.js"></script> 
    <script type="text/javascript" src="http://d23fbyuk1dcxop.cloudfront.net/js/jquery/jquery.form.min.gz.js"></script> 
</head> 
<body> 
<div id="photo-dlg2"> 
    <form id="updatePhoto2" enctype="multipart/form-data" elementid="updatePhoto2" name="updatePhoto2" method="POST" 
      action="http://mywebsite.com/article/updatePhoto"> 
     <input type="file" size="50" class="easyinput" id="photoFile" name="photoFile"> 
    </form> 
</div> 
<script type="text/javascript"> 
    $('#photo-dlg2').dialog({ 
     modal: true, 
     buttons: { 'submit' : function() { 
      $('#updatePhoto2').ajaxSubmit({ 
       dataType: "json", 
       success: function (data) { 
        alert(data['status']); 
       } 
      }); 
     }} 
    }); 
</script> 
</body> 
</html> 
+0

什麼是像螢火蟲,LiveHTTPHeaders告訴你的工具? – Anders 2011-01-07 20:39:42

+1

我嘗試使用example @ http://jquery.malsup.com/form/#ajaxSubmit,我可以看到發送的頭文件(用firebug來檢查它)。 – Chandu 2011-01-07 20:41:37

+0

也許你應該發佈你用來尋找標題;問題可能在那裏,而不是在你的頁面代碼中。 – Pointy 2011-01-07 21:01:58

回答

3

好吧,我花了一段時間,但我終於找到了答案:沒有解決方案!

實際上似乎jQuery的形式插件cannot upload files using the browser's XMLHttpRequest object

其實我已經嘗試過的插件網站上給出的例子,事實上,如果你添加一個<input type="file" name="photoFile">到您的窗體,頭X-要求,隨着=的XMLHttpRequest永遠不會發送到服務器,如果您的請求是Ajax請求,您的服務器將無法使用常規方法進行檢測。

很高興知道並感謝您的幫助。

4

我已經被這個錯誤所擊中。我知道你可以感受到多麼的孤獨:-)

我一直在尋找數週。有時我有XMLHttpRequest標頭,有時候我沒有。所以這可能不是一個明確的解決方案,但對我而言。

我測試了和你一樣的標題,並測試了Ajax設置。沒有工作,直到...一個完整的JavaScript語法清理我的代碼。經過一些IE6測試後,似乎有一些';' (或者是'','?不 - 閉嘴,當我寫 - 這是';')在一些關鍵點失蹤,並且任何現代瀏覽器都沒有受到影響......或者至少看起來它們沒有受到影響。 IE6被徹底打破了,所以我們發現了語法問題(順便說一下 - 或者二分法可能更現實)。

我不記得確切(在括號的長鏈結束時是否在情節之間......),但是在受此錯誤影響的每個地方,我都有一些語法錯誤被默默忽略。當然,jQuery越來越差了(就好像ajax設置被清除了一樣)。這是我生命中唯一一次我很高興得到一個IE6錯誤:-)

0

當在Javascript中定義對象時,您需要注意逗號。你的代碼缺少一個。

$('#photo-dlg').dialog({ 
    modal: true, 
    open: function() { $(this).load("/mywebsite/mydialog");}, // you had a missing comma here. 
    //importing <form id="formid" method="post" name="updatePhoto" enctype="multipart/form-data"> ... 
    buttons: { 
    'cancel' : function() {$(this).dialog('close');}, 
    'submit' : function() { 
       $('#formid').ajaxSubmit({ 
        dataType: "json", 
        success: function (data) { $('#photo-dlg').dialog('close'); }) 
       });} 
    }); 

但這可能不是你的問題的原因。

2

這可能有助於某人。

我想我知道問題何時發生。當你使用IE 7,8或9(顯然是...),並且你正嘗試使用ajaxform(我猜想ajaxsubmit發生同樣的事情)來上傳文件時,這就是問題發生的時間。

IE不發送X-Requested-With=XMLHttpRequest標題。 Chrome確實發送了這個頭文件,而Firefox也是如此。

0

當我意外地在頁面上放置了2個具有相同ID的表單時,IE 10將我的http標題(X-Requested-With = XMLHttpRequest)留下。

我知道這是舊的,但當我在這個問題上搜索時,它出現在谷歌的前5名的結果。