使用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
jsonerror:真
缓存控制:私人
内容类型:应用/ JSON; 字符集= utf-8的
内容长度:1331
POST:“{\”ID \“:\”4 \“}”
响应:
{“Message”:“无法将类型为\ u0027System.String \ u0027的对象转换为类型\ u0027System.Collections .Generic.IDictionary`2 [System.String,System.Object] \ u0027”,“StackTrace”:“at System。 System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o,Type type,JavaScriptSerializer serializer)中的Web.Script.Serialization .ObjectConverter.ConvertObjectToTypeInternal(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object&convertedObject)\ r \ n System.Web.Script.Serialization.JavaScriptSerializer.Deserialize中的System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o,Type type,JavaScriptSerializer serializer)\ r \ n中的,布尔值throwOnError,Object&convertedObject)\ r \ n在System.Web.Script.Script.Script.Services.RestHandler的System.Web.Script.Serialization.JavaScriptSerializer .Deserialize [T](字符串输入)\ r \ n中的JavaScriptSerializer序列化程序,字符串输入,类型类型,Int32 depthLimit)\ r \ n。 GetRawParamsFromPostRequest(HttpContext上下文, JavaScriptSerializer序列化程序)\ r \ n在System.Web.Script.Services.RestHandler .GetRawParams(WebServiceMethodData methodData,HttpContext context)\ 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/
除了上述内容之外,还需要检查以确保您不会多次“对字符串化”JSON数组。
我不小心在已经序列化的数组上调用了JSON.stringify(),这给OP收到了类似的问题。
即
var arr = JSON.stringify({ id: elementID, name: Name }); .... $.ajax({ ... data: JSON.stringify(arr), ... });
在这种情况下,将arr变量初始化更改为
var arr = { id: elementID, name: Name };
解决了我的问题。 🙂