2009-06-01 40 views
9

Tôi có những điều sau đây nhưng nó không hoạt động, tôi đọc một nơi nào đó trên stackoverflow rằng nó hoạt động như thế này nhưng tôi dường như không thể làm cho nó hoạt động .. nó lỗi ... tôi có làm gì sai không?Chuyển đối tượng j thành json thành jquery?

Nếu tôi làm truyền dữ liệu như thế này - nó hoạt động - vì vậy tôi biết dịch vụ của tôi là làm việc

//THIS WORKS 
data: "{one : 'test',two: 'test2' }" 


// BUT SETTING UP OBJECT doesn't work.. 

var saveData = {}; 
saveData.one = "test"; 
saveData.two = "tes2"; 


$.ajax({ 
    type: "POST", 
    url: "MyService.aspx/GetDate", 
    data: saveData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     alert(msg.d); 
    }, 
    error: function(msg) { 
    alert('error'); 
    } 

}); 
+0

lỗi là gì? – cgp

+0

Như đã lưu ý trong câu trả lời của Matt Winckler, vấn đề không nằm trong việc xử lý jQuery của đối tượng mà bạn cung cấp cho nó (nhưng điều mong đợi) - nhưng các dịch vụ .NET dường như mong đợi JSON là một chuỗi nó có thể phân tích cú pháp phía máy chủ . Bao gồm một thư viện cho mục đích nghiêm ngặt của việc xâu chuỗi các đối tượng là waaay không cần thiết trong trường hợp này. –

+0

Không có nhiều tác hại trong việc bao gồm ~ 2kb (trước gzip) json2.js trong gói JavaScript của bạn bao gồm. Hỗ trợ trình duyệt gốc xuất hiện trong các trình duyệt như Firefox 3.5 bắt chước các phương thức trong json2.js, vì vậy việc sử dụng API của nó là thực tiễn tốt cho tương lai. –

Trả lời

21

Tôi tin rằng mã được sẽ gọi .Value hoặc ToString() trên đối tượng của bạn và sau đó vượt qua dây. Bạn muốn chuyển JSON.

Vì vậy, bao gồm các json javascript thư viện

http://www.json.org/js.html

Và sau đó vượt qua ...

var saveData = {}; 
    saveData.one = "test"; 
    saveData.two = "tes2"; 


    $.ajax({ 
     type: "POST", 
     url: "MyService.aspx/GetDate", 
     data: JSON.stringify(saveData),  // NOTE CHANGE HERE 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      alert(msg.d); 
     }, 
     error: function(msg) { 
     alert('error'); 
     } 

    }); 
+0

cảm ơn bạn .. điều này làm việc tuyệt vời .... cảm ơn .. –

+0

hoặc $ .param (saveData) – Plattsy

3

Theo this blog post, lý do nó không hoạt động khi bạn cố gắng để vượt qua đối tượng là jQuery cố gắng tuần tự hóa nó. Từ bài:

Thay vì đi qua mà đối tượng JSON thông qua các dịch vụ web, jQuery sẽ tự động serialize và gửi nó như:

fname=dave&lname=ward 

Để đó, máy chủ sẽ trả lời với:

Invalid JSON primitive: fname. 

Điều này rõ ràng không phải là điều chúng tôi muốn xảy ra. Giải pháp là đảm bảo rằng bạn đang chuyển jQuery một chuỗi cho tham số dữ liệu [...]

Bạn đang làm gì trong ví dụ hoạt động.

3

Đề nghị của tôi sẽ được sử dụng jquery-json plug-in và sau đó bạn chỉ có thể làm điều này trong mã của bạn:

... 
data: $.toJSON(saveData), 
... 
Các vấn đề liên quan