[英]ajax GET works, POST gives 400 error
GetData(...)
方法沒問題,但SetSimple(...)
方法拋出錯誤400。
使用Javascript:
$.ajax(url,
{
type: action,
timeout: 3000,
data: { value: 123 },
contentType: "application/json; charset=utf-8",
//dataType: "json",
success: function (data, textStatus, jqXHR) {
displayInfo("success: "+data);
},
error: function(jqXHR, textStatus, errorThrown ) {
displayInfo("error: "+errorThrown+" "+textStatus);
}
}
);
C#:
[WebGet(RequestFormat = WebMessageFormat.Json)]
string GetData(int value);
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
string SetSimple(int value);
要運行/測試它我在瀏覽器中打開了服務,然后在另一個瀏覽器中使用javascript我的測試頁面。 (而dataType:“json”似乎沒有幫助。)並且fiddler響應顯示“服務器遇到處理請求的錯誤。請參閱服務器日志以獲取更多詳細信息”,但我在事件日志中看不到任何內容。 有誰看到我做錯了什么?
您應該將JavaScript對象轉換為字符串。
JSON.stringify(data)
那你的例子
$.ajax (url,
{
type: action,
timeout: 3000,
data: JSON.stringify({ value: 123 }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data, textStatus, jqXHR) {
displayInfo("success: "+data);
},
error: function(jqXHR, textStatus, errorThrown ) {
displayInfo("error: "+errorThrown+" "+textStatus);
}
}
);
您的ajax請求正在將“data”屬性設置為{value:123}。 您需要將適當的對象傳遞給CompositeObject的SetObject方法。 ajax請求看起來像是將它用作實用程序函數,因此只需將數據作為參數傳遞,因此ajax請求將是:
var makeAjaxCall = function(url, action, data) {
$.ajax(url,
{
type: action,
timeout: 3000,
data: data,
contentType: "application/json; charset=utf-8",
success: function (data, textStatus, jqXHR) {
displayInfo("success: "+data);
},
error: function(jqXHR, textStatus, errorThrown ) {
displayInfo("error: "+errorThrown+" "+textStatus);
}
}
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.