2014-02-20 54 views
9

我使用jQuery的POST功能,例如:jQuery.post並不總是發送表單數據

var fooVar = true; 
var barVar = 1; 
var bazVar = "baz"; 

$.post("url", 
    { 
     foo: fooVar, 
     bar: barVar, 
     baz: bazVar 
    }, 
    function(){ 
    alert("success"); 
    } 
); 

在我的日誌,我看到一個間歇問題,即請求"url"正在作出沒有任何形式參數,我只有這個函數調用它。

是否有過在POST請求可以被解僱,而無需發送jQuery中郵指定的形式參數的情況嗎?


我希望看到:

富=真&條= 1 &巴茲=巴茲

但是沒有形式參數都:


UPDATE:這個問題似乎是主要在Internet Explorer瀏覽器(IE7-IE11)從看統計數據,但它不是唯一的IE瀏覽器(Chrome,火狐也有過問題) 。當參數值是undefined

+0

做頭有形式和值是空白或者它甚至不是在請求..? – Drewness

+0

@Drewness這甚至不在請求!標題根本沒有表單參數。 – Curt

+0

可以顯示處理髮布數據的服務器端腳本嗎? –

回答

2

jQuery的發佈可以發送沒有形式參數的請求。

例如,如果我們有以下幾點:

var fooVar = undefined; 
var barVar = 1; 
var bazVar = "baz"; 

$.post("url", 
    { 
     foo: fooVar, 
     bar: barVar, 
     baz: bazVar 
    }, 
    function(){ 
    alert("success"); 
    } 
); 

然後貼將是形式參數:

巴= 1 &巴茲=巴茲

現在這並未」 t解決我的實際問題(從我可以告訴正確的條件已經到位,只有在所有變量都有值時才進行調用),但它確實回答我的問題。

1

除了使用$.post速記的,請嘗試使用$.ajax代替;不知道這是否能夠解決問題,但試用它肯定不會有什麼壞處。

另外,你少了一個函數調用的擔心。微觀優化ftw!

$.ajax({ 
    type: "POST", 
    url: "url", 
    data: { foo: bar } 
}); 
2

聽起來像瀏覽器版本的特定問題,試圖在不同版本的IE本地重現它。它可能是代碼中的一個錯誤,由一些版本的IE優雅地處理,而不是其他的(如數組中的尾隨逗號) - 在JavaScript代碼上運行JSLint/JSHint。我能想到的另一種情況是CORS預檢選項請求 - 它沒有正文。你確定你沒有執行CORS請求嗎?您的Ajax網址是否與原始地址匹配?

0

$.post是對POST請求使用$.ajax的簡寫方式,因此使用這兩種方法之間沒有太大區別。也許問題是在你的代碼中的其他地方,而不是在jQuery或你的瀏覽器。

但試試$.ajax。如果您需要對ajax請求進行更深入的配置,則通常會更好。它應該工作

例如

$.ajax({ 
    type: "POST", 
    url: "test_url", 
    data: { name: "John", location: "Boston" }, 
    success: function(response) { 
    alert('success !'); 
    } 
}); 

這裏更https://api.jquery.com/jQuery.ajax/