3
將問題保持簡短和甜美。我嘗試將JSON對象傳遞給ASMX Web服務時遇到500錯誤。需要注意的是,如果我聲明PARAMS作爲單個變量(如:int ID, int OrderHeaderID
等)我沒有收到錯誤。我看不出爲什麼會發生問題,我已經成功地以這種方式傳遞了對象,可能有不同的語法,但我不記得。500錯誤 - JSON對象POST .ASMX webservice
JS:
var returnHeader = {
ID: -1,
OrderHeaderID: parseInt(getQueryStringKey('OrderID')),
StatusID: 1,
DeliveryCharge: 0,
CreatedBy: $('span[id$="lblHidUsername"]').text(),
ApprovedBy: $('span[id$="lblHidUsername"]').text()
};
$.ajax({
type: "POST",
url: 'Order.asmx/SaveReturnHeader',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(returnHeader),
success: function (result) {
if (result.Status == 'OK') {
GetReturns();
}
else {
$('#divMessage').show().html(result.Data.Message).addClass('error');
}
},
error: function (x, e) {
if (x.status == 500) {
$('#divMessage').show().html('An unexpected server error has occurred, please contact support').addClass('error');
}
}
});
服務器:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public object SaveReturnHeader(BEReturnHeader returnHeader)
{
try
{
return new
{
Status = "OK",
Data = ""
};
}
catch (Exception ex)
{
return new
{
Status = "ERROR",
Data = ex
};
}
}
對象(縮寫爲簡單起見):
public int ID ...
public int OrderHeaderID ...
public int StatusID ...
public decimal DeliveryCharge ...
public string CreatedBy ...
public string ApprovedBy ...
請求數據:
{"ID":-1,"OrderHeaderID":5,"StatusID":1,"DeliveryCharge":0,"CreatedBy":"77777777","ApprovedBy":"77777777"}
響應頭:
HTTP/1.1 500 Internal Server Error
Date: Mon, 05 Dec 2011 16:38:36 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
jsonerror: true
Cache-Control: private
Content-Type: application/json
Content-Length: 91
響應數據:
{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}
FIX:
只好包裹JSON對象,以便它在服務器上確認:
var params = {
returnHeader: {
...
}
};
...
data: JSON.stringify(params),
...
{"returnHeader":{"ID":-1,"OrderHeaderID":5,"StatusID":1,"DeliveryCharge":0,"CreatedBy":"77777777","ApprovedBy":"77777777"}}
這就是問題所在。跛腳,我認爲它足夠聰明,只有一個物體被傳遞。感謝斯科特。在.NET 2.0中工作的樂趣... – Terry
ScottE:現在和陣列有同樣的問題,但我正確地命名它,有什麼想法? DATA:'{「ReturnDetails」:[{「ReturnHeaderID」:5,「SKU」:537258,「ReasonCode」:1,「Quantity」:1,「Comment1」:「」,Comment2「:」「, 「:」 「},{」 ReturnHeaderID 「:5」,SKU 「:467662」,ReasonCode 「:1,」 數量 「:1,」 註釋1 「:」 「 」註釋2「: 」「, 」將comment3「:」 「}]}'功能:'公共對象SaveReturnDetails(List ReturnDetails)' –
Terry
PS。如果你知道這個問題,我可以提出一個新的問題,這樣你就可以得到一個完整答案。 – Terry