将 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&lt;string&gt;(使用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 方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSON 框架将数值发送到 Web 服务

我正在尝试将 json 结构发送到 Web 服务器

将 UIImage 发送到仅接受 JSON 的 Web 服务(通过 RestKit)

如何通过 AFNetWorking 2.0 将 JSON 格式的数据发送到 Web? [复制]

如何将带有字节数组的 json 发送到 web api / postman

将 POST 中的 json 发送到 Web API 服务时出错