2012-01-17 42 views
152

Possible Duplicate:
Serializing to JSON in jQuery

Tôi muốn gửi một mảng như một yêu cầu Ajax:

info[0] = 'hi'; 
info[1] = 'hello'; 

$.ajax({ 
    type: "POST", 
    url: "index.php", 
    success: function(msg){ 
    $('.answer').html(msg); 
    } 
}); 

Làm thế nào tôi có thể làm điều này?

+0

tại đây: http://stackoverflow.com/questions/713884/convert-js-array-to-json-object-for-use-with-jquery-ajax – Z4k4r14

+0

loại: 'POST', url: '/ url/action /', dữ liệu: {param1: 1, id: "text"}, dataType: 'text', – Paul

Trả lời

197
info = []; 
info[0] = 'hi'; 
info[1] = 'hello'; 


$.ajax({ 
    type: "POST", 
    data: {info:info}, 
    url: "index.php", 
    success: function(msg){ 
    $('.answer').html(msg); 
    } 
}); 
Giải pháp
+9

vâng ... mà làm việc .. cảm ơn ... một điều nữa có thể được thực hiện ... đó là khởi tạo ** info = {}; ** sau đó ** dữ liệu: thông tin, ** –

+1

nó sẽ gửi 0 = hi & 1 = hello, nó sẽ hoạt động? phụ thuộc vào mã phía máy chủ của bạn. info = {} là một đối tượng đơn giản trong Javascript. info = [] là một đối tượng mảng. – Diode

+0

Làm thế nào bạn sẽ làm điều đó nếu bạn muốn 'info = arrayasvalues' thay vì mỗi khóa là một param? –

52

Chỉ cần sử dụng các phương pháp JSON.stringify và vượt qua nó thông qua là "dữ liệu" tham số cho hàm $ .ajax, như sau:

$.ajax({ 
    type: "POST", 
    url: "index.php", 
    dataType: "json", 
    data: JSON.stringify({ paramName: info }), 
    success: function(msg){ 
     $('.answer').html(msg); 
    } 
}); 

Bạn chỉ cần chắc chắn rằng bạn bao gồm JSON2.js nộp trong trang của bạn ...

+0

Tôi cần thêm 'JSON.stringify (...)' Cảm ơn bạn đã hỗ trợ! – ChaseHardin

+0

Trong trường hợp của tôi, bản đồ khóa-giá trị được yêu cầu sai với mã trên. Tôi đã thay đổi dòng "data" thành: data: {paramName: JSON.stringify (info)}, – Shogg

8

Vì bạn đang sử dụng jQuery hãy sử dụng nó seralize chức năng để serialize dữ liệu và sau đó vượt qua nó vào tham số dữ liệu cuộc gọi ajax:

info[0] = 'hi'; 
info[1] = 'hello'; 

var data_to_send = $.serialize(info); 

$.ajax({ 
    type: "POST", 
    url: "index.php", 
    data: data_to_send, 
    success: function(msg){ 
     $('.answer').html(msg); 
    } 
}); 
+1

Đây không phải là toàn bộ sự thật, ít nhất là không phải hôm nay. jQuery sẽ không thực sự tự động tuần tự hóa bất kỳ mảng nào. Khi tôi thử với một dãy số nguyên đơn giản, nó chỉ giữ lại mục cuối cùng. Vui lòng kiểm tra bài đăng này để được giải thích thêm: http://stackoverflow.com/a/4239496/261332 – userfuser

+0

Cảm ơn bạn @userfuser Tôi đã cập nhật câu trả lời và xóa phần tự động tuần tự hóa. – BlackDivine

+11

làm thế nào điều này có rất nhiều upvotes? Không có hàm jQuery như là 'jQuery.serialize()'. Có '.serialize()' nhưng nó có nghĩa là được sử dụng trên một tập các phần tử biểu mẫu. Hãy thử mã này và bạn sẽ chỉ nhận được 'TypeError: $ .serialize không phải là một chức năng' – billynoah