将JSON发送到webmethod?

如何使用jQuery将JSON对象发送到web方法?

请参阅Dave Ward撰写的这篇文章。 这是一个关于完成这些工作的完整教程。 你还会发现其他很棒的jquery / ASP.net东西。

编辑: – Dave正在调用没有任何参数的方法,您可以将空数据属性替换为您要发送的实际数据:

$.ajax({ type: "POST", url: "Default.aspx/GetDate", data: "{'name':'tiger1','hobbies':['reading','music']}",//PUT DATA HERE contentType: "application/json; charset=utf-8", dataType: "json", 

WebMethods期望包含JSON的字符串将在服务器端解析,我使用JSON.stringify函数将参数对象转换为字符串,并发送数据,我有这样的函数:

 jQuery.executePageMethod = function(location, methodName, methodArguments, onSuccess, onFail) { this.ajax({ type: "POST", url: location + "/" + methodName, data: JSON.stringify(methodArguments), // convert the arguments to string contentType: "application/json; charset=utf-8", dataType: "json", success: function(data, status) { var jsonData = JSON.parse(data.d); onSuccess(jsonData, status); }, fail: onFail }); }; 

我建议您在页面中包含json2.js解析器,以使JSON.stringify函数可以跨浏览器使用。

您可以使用的另一个库是jquery-json库 。 一旦包括:

 var json = $.toJSON(your_object); 

我见过的最方便的解决方案是通过使用开源JSON2.js库来解析和“字符串化”复杂的对象数据来简化这一过程。

这两篇优秀的文章详细介绍:

  • Dave Ward 使用复杂的类型使呼叫服务更少……复杂 。

  • 通过JQuery Ajax将JavaScript数组转换为 Chris Brandsma 的Asp.Net WebMethod 。

第二篇文章可能与您特别相关,尽管它使用以下签名调用Web 服务方法…

 public void SendValues(List list) 

…它演示了如何使用JSON2.js库在javascript中呈现List (使用jQuery,这个例子直接来自第二篇文章):

 var list = ["a", "b", "c", "d"]; var jsonText = JSON.stringify({ list: list }); // The 'list' is posted like this $.ajax({ type: "POST", url: "WebService1.asmx/SendValues", data: jsonText, contentType: "application/json; charset=utf-8", dataType: "json", success: function() { alert("it worked"); }, failure: function() { alert("Uh oh"); } }); 

只需使用您的webmethod URL代替Web服务。

您需要使用Ajax发布它并接受web方法上的传入字符串。 然后,您需要使用JavaScript反序列化器将其转换为服务器端的对象。

JSON.stringify确实有帮助,但是:

  1. 它不是跨浏览器看看这里: http : //www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/#

  2. 对于浏览器内置函数 – 每个浏览器都会遇到问题。 如果您使用上述序列化,您将需要:

    • 使用字符串中的regexp删除换行符
    • 注意“在字符串中

示例代码在这里:

 var dataString = JSON.stringify({ contractName: contractName, contractNumber: contractNumber }); $.ajax({ type: "POST", url: "CreateQuote.aspx/GetCallHistory", data: dataString, contentType: "application/json; charset=utf-8", dataType: "json", success: function (result) { alert(result.CallHistoryDescription); OpenLightBox('divDelete'); } }); [System.Web.Services.WebMethod] public static object GetCallHistory(string contractName, string contractNumber) { return new { CallHistoryDescription = "Nalan" }; }