2009-10-06 40 views

Trả lời

20

Vui lòng tham khảo this bài viết của Dave Ward. Đây là một hướng dẫn hoàn chỉnh về cách thực hiện công cụ này. Ngoài ra, bạn sẽ tìm thấy những thứ jquery/ASP.net tuyệt vời khác.

EDIT: - Dave đang kêu gọi phương pháp mà không cần bất kỳ đối số, bạn có thể thay thế trống dữ liệu tài sản với số liệu thực tế mà bạn muốn gửi:

$.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 - Tôi nghĩ chủ đề này và bài viết cụ thể đó sẽ tiếp tục xuất hiện trong một thời gian :) –

+1

Có @Russ Dave đã cho thấy ánh sáng không biết có bao nhiêu nhà phát triển. – TheVillageIdiot

+0

Bạn có chắc chắn rằng mảng sở thích được truyền như bạn mong đợi không? –

0

Bạn sẽ cần phải gửi nó sử dụng Ajax và chấp nhận chuỗi đến trên webmethod. Sau đó, bạn cần phải sử dụng trình khử JavaScript để chuyển đổi nó thành một đối tượng ở phía máy chủ.

+0

Tôi nghĩ rằng anh ấy hỏi làm thế nào để biến đối tượng JavaScript thành một chuỗi JSON để gửi cùng với webmethod đã nói. – ceejayoz

11

WebMethods mong đợi một chuỗi chứa JSON mà sẽ được phân tích trên server-side, tôi sử dụng JSON.stringify chức năng để chuyển đổi một thông số đối tượng chuỗi, và gửi dữ liệu, tôi có một chức năng như thế này:

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

Tôi khuyên bạn nên bao gồm trình phân tích cú pháp json2.js trong các trang của mình để có sẵn trình duyệt chéo JSON.stringify.

+0

+1 - trình bao bọc tốt –

5

Các giải pháp tiện lợi nhất mà tôi đã thấy đơn giản hóa điều này bằng cách sử dụng thư viện the open-source JSON2.js để phân tích cú pháp và 'xâu chuỗi' dữ liệu đối tượng phức tạp.

Hai bài báo xuất sắc đi vào chi tiết:

Bài báo thứ hai có thể là đặc biệt thích hợp cho bạn, mặc dù nó gọi một trang web dịch vụ phương pháp với chữ ký sau đây ...

public void SendValues(List<string> list) 

... nó thể hiện như thế nào để sử dụng thư viện JSON2.js để hiển thị một List<string> trong javascript (sử dụng jQuery, ví dụ này được lấy trực tiếp từ bài viết thứ hai):

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

Chỉ cần sử dụng URL webmethod thay cho dịch vụ web.

6

Một thư viện khác mà bạn có thể sử dụng là jquery-json library. Khi được bao gồm:

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

Ooh, cảm ơn vì điều này. Phiên bản được rút gọn là ~ 2k, và nó tích hợp tốt với jQuery (hiển nhiên), điều này rất hay nếu bạn đã sử dụng nó (mà tôi đang sử dụng). –

0

JSON.stringify không giúp đỡ, nhưng:

  1. nó không phải qua trình duyệt hãy xem ở đây: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/#

  2. Đối với trình duyệt trong xây dựng chức năng - mỗi trình duyệt sẽ có vấn đề của nó. Nếu bạn sử dụng serialization trên Bạn sẽ cần phải:

    • loại bỏ dòng mới với regexp trong chuỗi
    • nâng niu mang về "trong chuỗi
0

Mẫu mã là ở đây:

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

Có bắt buộc phải vượt qua contractName trước và sau đó contractNumber trong khi tạo JSON, bởi vì đôi khi tôi không chắc chắn trong đó tham số tuần tự sẽ đến, vì các kịch bản lệnh phía máy khách động –

Các vấn đề liên quan