当前位置: 首页 > 面试题库 >

使用jQuery Ajax将参数传递给WebMethod

赵元白
2023-03-14
问题内容

我有一个简单的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:

<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日,星期四,格林尼治标准时间
jsonerror:true
缓存控制:私有
内容类型:application / json; charset = utf-8
内容长度:1331

POST:“ {\” ID \“:\” 4 \“}”

响应:

{“消息”:“无法在系统上将类型为\ u0027System.String \ u0027的对象转换为类型为\
u0027System.Collections .Generic.IDictionary`2 [System.String,System.Object] \
u0027“,” StackTrace“:”。 Web.Script.Serialization
.ObjectConverter.ConvertObjectToTypeInternal(Object o,Type
type,JavaScriptSerializer序列化器,布尔throwOnError,Object&ConvertedObject)\ r \
n位于System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object
o,Type
type,JavaScriptSerializer序列化器,System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(对象o,类型类型,JavaScriptSerializer序列化器)的布尔型throwOnError,Object&convertObject)\
r \ n,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序列化器)\在System.Web.Script.Services.RestHandler
.GetRawParams(WebServiceMethodData methodData,HttpContext上下文)处为r \
n,在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodData
methodData)处为r \ n“,” ExceptionType“ :“
System.InvalidOperationException”}GetRawParams(WebServiceMethodData
methodData,HttpContext上下文)\ r \ n位于System.Web.Script.Services
.RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodData
methodData)“,” ExceptionType“:”
System.InvalidOperationException“}GetRawParams(WebServiceMethodData
methodData,HttpContext上下文)\ r \ n位于System.Web.Script.Services
.RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodData
methodData)“,” ExceptionType“:” System.InvalidOperationException“}

有人对此有任何想法吗?谢谢!!


问题答案:

快速项目:

您的可变参数 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/



 类似资料:
  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 问题内容: 在我的RCP应用程序中,左侧有一个用于导航的视图,右侧有一个用于视图的文件夹。透视图看起来像这样: 我想根据用户在导航树中选择的内容打开不同的视图。认为这并不难。我的导航树视图: 这似乎很好。仅有一个小问题:我需要以某种方式将对象(例如,selectedItem)传递给我的视图,以使用户与其内容进行交互。我怎么做? 我看到了一些示例,其中一些同事编写了自己的视图,并将其放置在右侧。然后

  • 问题内容: 我正在尝试为我的程序制作验证类。我已经建立了与MySQL数据库的连接,并且已经在表中插入了行。该表由,和领域。现在,我想通过构造函数的参数在数据库中选择特定的行。 但这似乎没有用。 问题答案: 您应该使用方法设置。这既可以确保语句的格式正确,又可以防止: Java教程中有一个很好的教程,说明如何正确使用。

  • 问题内容: 我正在寻找一种将变量或字符串或任何东西传递给JButton的匿名actionlistener(或显式actionlistener)的方法。这是我所拥有的: 现在,我只是声明是一个全局变量,但是我讨厌这种工作方式。有更好的选择吗? 问题答案: 创建一个实现该接口的类。 提供具有参数的构造函数。 问题?

  • 我有一些JMH基准测试,我正在尝试分析。我想启用 GC 日志记录以查看生成了多少垃圾,但我不知道如何传递 JVM 参数。我知道JMH在分叉的JVM中运行基准测试,所以对我来说如何做到这一点并不是很明显。我正在使用断续器。