将JSON发送到webmethod?

时间:2009-10-06 19:01:01

标签: c# asp.net jquery json asmx

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

7 个答案:

答案 0 :(得分:20)

请参阅Dave Ward的this文章。这是一个关于做这些事情的完整教程。你还会发现其他很棒的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",

答案 1 :(得分:11)

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函数可以跨浏览器使用。

答案 2 :(得分:6)

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

var json = $.toJSON(your_object);

答案 3 :(得分:5)

我见过的最方便的解决方案是使用the open-source JSON2.js库来解析和“字符串化”复杂的对象数据。

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

第二篇文章可能与您特别相关,虽然它使用以下签名调用web 服务方法...

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"); }
});

只需使用您的网络方法网址代替网络服务。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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

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

答案 6 :(得分:0)

示例代码在这里:

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"
            };

        }