2008-10-31 24 views
8

Cho đến nay, tôi đã chỉ chuyển chuỗi javascript vào các phương thức web của mình, được phân tích cú pháp, thường là Hướng dẫn. nhưng bây giờ tôi có một phương pháp mà chấp nhận một IList ... trên máy khách, tôi xây dựng mảng này của các đối tượng và sau đó cố gắng để vượt qua nó thích:Tại sao không jquery biến mảng của tôi thành một chuỗi json trước khi gửi đến phương pháp web asp.net?

$.ajax({ 
    type: 'POST', 
    url: 'personalization.aspx/SetPersonalization', 
    data: "{'backerEntries':" + backerEntries + "}", 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: postcardManager.SetPersonalizationComplete 
}); 

Các bài:

{'backerEntries':[object Object],[object Object],[object Object]} 

Các lỗi phản hồi:

Invalid JSON primitive: object. 

Vì lý do nào đó, jquery dường như không chuyển mảng của tôi thành chuỗi json? Bất kỳ ý tưởng tại sao? Tôi đã thử đặt [] xung quanh backerEntries, và {}, cũng như {[]} chỉ trong tuyệt vọng tuyệt đối. Tôi có thiếu thứ gì đó hiển nhiên ở đây không?

Trả lời

10

dữ liệu: "{ 'backerEntries':" + backerEntries + "}",

..is giống như

data: "{'backerEntries':" + backerEntries.toString() + "}", 

... đó là khá nhiều vô ích. Sử dụng đề xuất của Duncan nếu bạn chỉ muốn chuyển danh sách giá trị được mã hóa với tên "backerEntries" trong chuỗi truy vấn của bạn. Nếu bạn muốn mã hóa JSON dữ liệu, hãy nhận a JSON library và gọi JSON.stringify().

+0

Cảm ơn Shog9 .. đó là những gì tôi googled và đã bắt đầu triển khai. Thật không may, danh sách của tôi không chỉ là một chuỗi các chuỗi, nó là một danh sách các đối tượng tùy chỉnh .. vì vậy đó là lý do tại sao tôi đoán jquery không json chuỗi nó. – EvilSyn

+0

Làm việc mà không bị cản trở. Tôi ngạc nhiên jquery không có được xây dựng trong! – EvilSyn

+1

jQuery không cung cấp dịch vụ tuần tự hóa. Vì bạn đang sử dụng ASP.NET, thay vì thêm một thư viện mới, bạn nên sử dụng các trình tự tuần tự được xây dựng sẵn mà bạn nhận được miễn phí với khung công tác ASP.NET ajax (xem phản hồi của tôi bên dưới). –

4

Dữ liệu bạn đang chuyển bạn đang cố chuyển nó thành chuỗi. Nếu bạn muốn jQuery chuyển đổi nó, hãy để nguyên toàn bộ thứ như một đối tượng, ví dụ:

data:{backerEntries: backerEntries } 

Giả sử người ủng hộ khóa họcTội là một mảng. jQuery sẽ biến đổi điều này và sẽ thêm nó vào chuỗi truy vấn vì đó là hành vi mặc định của nó. Mã hiện tại của bạn dựa vào hành vi JavaScript mặc định sẽ không theo mặc định chuyển đổi mảng thành biểu diễn chuỗi của nó.

2

Vì bạn đang sử dụng ASP.NET, bạn có thể sử dụng được xây dựng trong ASP.NET AJAX serialization thư viện:

var backerEntriesJson = Sys.Serialization.JavaScriptSerializer.serialize(backerEntries); 

sau đó vượt qua đó trực tiếp trong jQuery của bạn gọi ajax:

... 
data: backerEntriesJson, 
... 
-2

Đây không phải là JSON hợp lệ: {'foo': 'bar'}

Không, chưa bao giờ, sẽ không bao giờ có. Các bộ xử lý JSON thường rất tha thứ, điều này tất nhiên là một sự tiện lợi giả.

Đọc thông số kỹ thuật. Một chuỗi được định nghĩa để được kèm theo trong dấu ngoặc kép, không phải dấu nháy đơn, không phải các ký tự mặt cười, không phải các mẩu kim loại uốn cong ở các góc vuông, chứ không phải các viên gạch. Không có đề cập đến dấu nháy đơn, thời gian.

Bây giờ, tên thuộc tính là chuỗi JSON. Theo định nghĩa, chúng PHẢI được kèm theo trong dấu ngoặc kép.

hợp lệ: { "foo": "bar"} hợp lệ "{ "foo": 100} hợp lệ: { "foo": true} hợp lệ: { "foo": [ "một"," hai "]," bar ": false}

xem www.json.org

xem www.jsonlint.com

+0

Đây là hiệu chỉnh điểm đánh dấu màu đỏ, nhưng bạn có thể trả lời câu hỏi này không? – Eli

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