2009-10-06 69 views

回答

20

请参考this文章戴夫·沃德。这是一个完成这个东西的教程。你也会发现其他很棒的jQuery/ASP.net的东西。

编辑: - 戴维调用方法不带任何参数,可以更换空数据财产与实际数据要发送:

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

+1 - 我认为这个话题和那篇文章会不断出现一段时间:) – 2009-10-06 19:06:27

+1

是的@Russ Dave已经展示了轻到不知道有多少开发人员。 – TheVillageIdiot 2009-10-06 19:08:01

+0

你确定业余爱好数组按照你的预期通过了吗? – 2009-10-06 20:20:22

0

您将需要使用Ajax将它张贴并接受webmethod上的传入字符串。然后,您需要使用JavaScript解串器将其转换为服务器端的对象。

+0

我想他是问如何把JavaScript对象变成一个JSON字符串发送到上述webmethod。 – ceejayoz 2009-10-06 20:00:03

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功能的跨浏览器。

+0

+1 - 好包装 – 2009-10-06 19:12:59

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

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

6

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

var json = $.toJSON(your_object); 
+2

噢,谢谢你。缩小版本是〜2k,并且它与jQuery很好地集成(很明显),如果你已经使用它(这是我),这很好。 – 2009-10-06 21:31:04

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

     } 
+0

在创建JSON时,是否必须首先传递contractName然后传递contractNumber,因为有时我不确定哪些顺序参数会来,因为动态客户端脚本 – 2015-04-09 11:35:37