2011-04-03 43 views
29

這個很奇怪。我在代碼中有多個$.post(),但有一個不知道爲什麼發送json參數爲x-www-form-urlencoded,因此不起作用。

下面的代碼:

$.post("/Route/SaveTransportProperties", { properties: JSON.stringify(propArray), currTravelBox: JSON.stringify(travelBoxObj), accessToken: getAccessToken()}, function(data) 
    { 
     //DO STUFF 
    }); 

的XHR看起來像這樣在Firefox: Firefox screenshot

任何想法,爲什麼會出現這種情況?我也強制類型爲'json',但也不起作用。

回答

31

如果你要發送的數據作爲JSON然後使用$就功能

您可以指定型崗位和數據類型JSON。

$.ajax({ 
    url: "mydomain.com/url", 
    type: "POST", 
    dataType: "xml/html/script/json", // expected format for response 
    contentType: "application/json", // send as JSON 
    data: $.param($("Element or Expression")), 

    complete: function() { 
    //called when complete 
    }, 

    success: function() { 
    //called when successful 
}, 

    error: function() { 
    //called when there is an error 
    }, 
}); 

從AJAX文件兩者

http://api.jquery.com/jQuery.ajax/

contentTypeString 
Default: 'application/x-www-form-urlencoded; charset=UTF-8' 
+0

確定。我migth有誤從某處ajax代碼,或者從舊的或更新的jquery版本,但問題爲什麼ajax不工作(請參閱我的意見在Olli答案下)是類型param bc我有「JSON」,而不是「POST」 – 2011-04-03 13:42:05

+2

dataType指定_response_的預期類型,而不是發佈數據。 Olli的答案是正確的 - 您需要使用$ .ajax並指定contentType選項。 – 2012-09-06 18:16:23

+0

Chris是對的,修正答案 – 2012-09-06 20:01:09

8

因爲$.post()是用於發送形式樣的請求。 $.ajax用於發送任何你想要的。有關更多信息,請參見$.ajax頁面中的contentType

引用:

當發送數據到服務器時,使用這種內容類型。默認是「application/x-www-form-urlencoded」,這在大多數情況下都可以。如果明確地將內容類型傳遞給$ .ajax(),那麼它將始終發送到服務器(即使沒有發送數據)。數據將始終使用UTF-8字符集傳輸到服務器;你必須在服務器端正確解碼。

+1

Post是$ .ajax()的簡寫,所以它應該可以工作,並且我也可以在代碼中的其他地方工作。 ......就在這裏,它似乎失敗了。我沒有使用$ .ajax()的原因是因爲在IE9 compat模式下拋出了一個異常「SCRIPT87:無效的參數」。但與$ .post()(除了它不工作...這害羞我的問題)不會拋出任何錯誤。 – 2011-04-03 13:37:27

1

你也可以強迫你的數據是在成功功能的JSON: data = JSON.parse(data);