使用 jQuery Ajax 將參數傳遞給 WebMethod
我有一個簡單的 web 方法和 ajax 呼叫,並繼續收到一個錯誤,說它不能將字元串轉換為 IDictionary 對象???
這是ajax呼叫:
var params = '{"ID":"' + rowid + '"}'; $.ajax({ url: 'EDI.asmx/GetPartnerDetails', type: "POST", contentType: "application/json; charset=utf-8", data: JSON.stringify(params), dataType: "json", //not json . let me try to parse success: function(msg, st) { . . . .這是網路方法:
<WebMethod()> _ Public Function GetPartnerDetails(ByVal ID As String) As String 'Dim objParam As IDictionary = CType(JsonConvert.DeserializeObject(ID), IDictionary) 'Dim rowID As String = objParam("ID") Dim objController As New HealthComp.BLL.X12Partners.TradingPartnersController Dim objInfo As TradingPartnersInfo = objController.FetchByPartnerID(Int32.Parse(ID)) Return JsonConvert.SerializeObject(objInfo) End Function這是我從 FireBug 看到的:
響應標頭
伺服器:Microsoft-IIS/5.1
日期:2009 年 4 月 9 日星期四 21:43:59 GMT
jsonerror:true
Cache-Control:private
Content-Type:application/json; charset=utf-8
內容長度:1331
POST: “{"ID":"4"}”
回复:
{“消息”:“無法將類型 \u0027System.String\u0027 的對象轉換為類型 \u0027System.Collections .Generic.IDictionary`2
$$ System.String,System.Object $$\u0027",“StackTrace”:" 在 System.Web.Script.Serialization .ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer 序列化程序, Boolean throwOnError, Object&convertedObject)\r\n 在 System.Web.Script.Serialization。 ObjectConverter.ConvertObjectToTypeMain(Object o,Type 類型,JavaScriptSerializer 序列化程序,Boolean throwOnError,Object& convertObject )\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o, Type type, JavaScriptSerializer 序列化程序)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer 序列化程序,字元串輸入,類型類型,Int32 depthLimit)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer .Deserialize$$ T $$(字元串輸入)\r\n 在 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext 上下文,JavaScriptSerializer 序列化程序)\r\n 在 System.Web.Script.Services.RestHandler .GetRawParams(WebServiceMethodData methodData,HttpContext 上下文) \r\n 在 System.Web.Script.Services .RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)",“ExceptionType” :“System.InvalidOperationException”} 有人對此有任何想法嗎?謝謝!!
快速項目:
你的變數 params
var params = '{ID:' + rowid + '}';是一個字元串。所以行:
data: JSON.stringify(params),是多餘的(或者應該是)。剛設置data: params,接下來,在您的 Web 方法中,將結果轉換為 JSON 字元串並將其作為字元串返回。如果您的 Web 方法類具有 ScriptMethod 屬性,則不需要這樣做。只需將數據作為本機類型返回,Asp.Net 就會為您轉換為 JSON。
您可能會閱讀以下文章: http ://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/
http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/