将 JSON 发送到 web 方法?
Posted
技术标签:
【中文标题】将 JSON 发送到 web 方法?【英文标题】:Send JSON to webmethod? 【发布时间】:2010-12-04 09:17:40 【问题描述】:如何使用 jQuery 将 JSON 对象发送到 Web 方法?
【问题讨论】:
【参考方案1】:请参阅 Dave Ward 的 this 文章。这是一个关于做这些事情的完整教程。此外,您还会发现其他很棒的 jquery/ASP.net 东西。
编辑:- Dave 正在调用不带任何参数的方法,您可以将空 data 属性替换为您要发送的实际数据:
$.ajax(
type: "POST",
url: "Default.aspx/GetDate",
data: "'name':'tiger1','hobbies':['reading','music']",//PUT DATA HERE
contentType: "application/json; charset=utf-8",
dataType: "json",
【讨论】:
+1 - 我认为这个话题和那篇特定的文章会持续一段时间:) 是的@Russ Dave 已经表明不知道有多少开发人员。 您确定 hobbies 数组按预期传递吗? @Josh 在此页面上举例说明 [json.org/example.html] 会的。其实这只是为了说明,如果您觉得有问题,请编辑答案或在评论中添加正确的内容,我会编辑答案。【参考方案2】:WebMethods 期望一个包含 JSON 的字符串将在服务器端解析,我使用 JSON.stringify
函数将 parameters 对象转换为字符串,并发送数据,我有一个函数像这样:
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 函数跨浏览器可用。
【讨论】:
【参考方案3】:您可以使用的另一个库是jquery-json
library。包含后:
var json = $.toJSON(your_object);
【讨论】:
哦,谢谢。缩小版约为 2k,它与 jQuery 很好地集成(显然),如果你已经在使用它(我是),那就太好了。【参考方案4】:我见过的最方便的解决方案通过使用the open-source JSON2.js 库来解析和“字符串化”复杂的对象数据来简化这一点。
这两篇优秀的文章详细介绍:
Using complex types to make calling services less… complex 戴夫·沃德。
javascript Arrays via JQuery Ajax to an Asp.Net WebMethod 克里斯·布兰兹玛。
第二篇文章可能与您特别相关,尽管它调用了一个带有以下签名的 web service 方法...
public void SendValues(List<string> list)
...它演示了如何使用JSON2.js库在javascript中渲染一个List<string>
(使用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"); );
只需使用您的网络方法 URL 代替网络服务。
【讨论】:
【参考方案5】:您需要使用 Ajax 发布它并接受 webmethod 上的传入字符串。然后,您需要使用 JavaScript 反序列化器将其转换为服务器端的对象。
【讨论】:
我认为他在问如何将 JavaScript 对象转换为 JSON 字符串以发送到所述 webmethod。【参考方案6】:JSON.stringify 确实有帮助,但是:
它不是跨浏览器 看看这里: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/#
对于浏览器内置功能 - 每个浏览器都会有它的问题。如果您使用上述序列化,您将需要:
在字符串中使用正则表达式删除换行符 注意字符串中的 "【讨论】:
【参考方案7】:示例代码在这里:
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"
;
【讨论】:
在创建JSON时是否必须先传递contractName然后传递contractNumber,因为有时我不确定哪个序列参数会出现,因为动态客户端脚本以上是关于将 JSON 发送到 web 方法?的主要内容,如果未能解决你的问题,请参考以下文章
将 UIImage 发送到仅接受 JSON 的 Web 服务(通过 RestKit)
如何通过 AFNetWorking 2.0 将 JSON 格式的数据发送到 Web? [复制]