我有一些jQuery的,看起來像這樣:如何設置jQuery ajax post的contentType,以便ASP.NET MVC可以讀取它?
$.ajax({
type: "POST",
url: "/Customer/CancelSubscription/<%= Model.Customer.Id %>",
contentType: "application/json",
success: refreshTransactions,
error: function(xhr, ajaxOptions, thrownError) {
alert("Failed to cancel subscription! Message:" + xhr.statusText);
}
});
如果被調用的動作導致異常會最終得到通過在Global.asax的Application_Error拿起在那裏我有一些像這樣的代碼:
var ex = Server.GetLastError();
if (Request.ContentType.Contains("application/json"))
{
Response.StatusCode = 500;
Response.StatusDescription = ex.Message;
Response.TrySkipIisCustomErrors = true;
}
else
{
// some other way of handling errors ...
}
當我執行腳本執行post時,Request.ContentType始終是一個空字符串,因此不會碰到第一個if塊。是否還有其他值應該放在ajax「contentType」中?或者有另一種方法讓我告訴asp.net內容類型應該是「application/json」嗎?
澄清
我想達到的目標是通過異常消息回到阿賈克斯錯誤事件。目前,即使IF塊被繞過,錯誤事件正確地拋出一個警告框,但是該消息是「未找到」。
正如你所看到的,我正在嘗試將異常消息設置爲Response.StatusDescription,我相信ajax錯誤中的xhr.statusText設置爲。
這jQuery的1.4改變,現在它總是發送的內容類型...重要的一點:) http://api.jquery.com/jQuery.ajax/ – 2010-02-04 20:35:07
我測試過這種方法出來,它的工作。我們在這裏使用jQuery 1.3.2。從Nick的描述看來,這聽起來像我的問題代碼應該與1.4一起工作。 – 2010-02-04 20:43:57
這是正確的答案。在beforeSend中修改XHR對象的內容類型設置在某些瀏覽器中無法正常工作,並且該服務將返回XML而不是JSON。 – 2010-02-08 02:06:57