2010-08-18 70 views
2

我有一個jQuery函數使用$ .ajax發佈到服務器,它在IE,Chrome和Safari中正常工作,但在Firefox中,服務器沒有收到POST值。當我詢問的形式收集(使用傳統的ASP),我得到undefined所有值

$.ajax({ 
    type: 'POST', 
    url: url, 
    dataType: "text", 
    data: { value1: true, value2: false }, 
    success: function(html) { 
     // removed for clarity 
    }, 
    error: function(xhr, ajaxOptions, thrownError) { 
     // removed for clarity 
    } 

這肯定擊中服務器,當我看到在Firebug的值,它表明正是我所期待的POST,但某處,數據將丟失

爲了使事情更混亂,我在本地在IIS上運行它,它可以在所有瀏覽器中正常工作。

它不這樣做的URL生成,這取決於域運行它的跨域職位,所以我不能留在任何硬編碼值可能會造成問題

我想這是財產以後簡單我已經錯過了,但我的生活,我什麼也看不見

回答

3

簡短的回答:

當提交的HTTP POST,大多數瀏覽器(除了火狐,據我可以告訴)將在一個TCP/IP幀中發送HTTP請求標頭,然後爲實際的POST數據開始新的第二幀,即使它可能(理論上)都適合於一個框架。 Firefox不會這樣做 - 它會將POST數據發送到與請求標頭相同的幀中,只有在總請求(標頭+ POST數據)不適合單個幀時纔會溢出到多個幀中。在IIS 7.0中似乎存在一個錯誤,即當HTTP POST由自定義404錯誤處理程序頁面處理時,包含在與初始請求相同的TCP幀中的任何POST數據都將被丟棄。

骯髒的骯髒的解決方法是確保您的窗體中的第一件事是1460字節的填充值 - <input type="hidden" name="padding" value="xxxxxxx...." />應該這樣做 - 第二件事是一個虛擬的名稱/值對來解決由填充引起的錯誤 - <input type="hidden" name="splitter" value="1" />。隨後的表單值應該在Request.Form集合中正常顯示。

關於我們如何處理所有問題的長篇答案和解釋,請參閱this post on my blog