使用jQuery Ajax将参数传递给WebMethod

Bri*_*ney 13 asp.net parameters jquery json web-services

我有一个简单的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) { . . . .
Run Code Online (Sandbox Code Playgroud)

这是webMethod:

<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
Run Code Online (Sandbox Code Playgroud)

这是我从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", "堆栈跟踪":"在系统. Web.Script.Serialization .ObjectConverter.ConvertObjectToTypeInternal(对象O,类型类型,JavaScriptSerializer串行器,布尔throwOnError,对象&convertedObject个)\ r \n在System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(对象O,类型类型,JavaScriptSerializer串行,布尔throwOnError,对象&convertedObject个)\ r \n在System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(对象O,类型类型,JavaScriptSerializer串行个)\ r \n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(在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的上下文)\ r \n在System.Web.Script.Services .RestHandler.ExecuteWebServiceCall(HttpContext的上下文中,WebServiceMethodData methodData)" ,"ExceptionType":"System.InvalidOperationException"}

有人对此有什么想法吗?谢谢!!

Chr*_*sma 31

快速项目:

你的变量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/

  • 你就是男人.非常感谢克里斯!我添加了这个:var jsonText = JSON.stringify({ID:rowid}); 看完你的文章后.我读过很多文章,显示带参数的传递参数.你是我读过的第一个解释并修复它的人.Mucho gracias! (4认同)