2012-04-21 36 views
11

Mục tiêu tổng thể của tôi là để có được tất cả một số tất cả các trình đơn thả xuống trên một trang và gửi để được xử lý bởi một tập tin php.Gửi một mảng đối tượng dưới dạng dữ liệu bài đăng ajax?

Ngay bây giờ, cách tôi đang làm trong jQuery là tạo một mảng lịch biểu tổng thể và sau đó thêm từng phần tử được cập nhật vào mảng đó. Vì vậy, tôi có một cái gì đó như:

var schedule = []; 
var data = { 
    'user_id' : '12', 
    'day_of_week' : 'Monday', 
    'when' : 'start', 
    'time' : '12 AM' 
} 
schedule.push(data); 
var data = { 
    'user_id' : '13', 
    'day_of_week' : 'Tuesday', 
    'when' : 'end', 
    'time' : '12 AM' 
} 
schedule.push(data); 
// schedule would have two objects in it 

Rõ ràng là trong vòng lặp và công cụ.

Vì vậy, mảng lịch biểu của tôi có hai đối tượng trong đó, trong trường hợp này.

Bây giờ, có thể sử dụng mảng lịch biểu đó làm dữ liệu ajax không? Nó không làm việc nếu tôi làm điều gì đó như:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: schedule, 
    type: 'POST' 
}); 

Nhưng nếu tôi thay đổi nó thành schedule[0] nó hoạt động tốt, nhưng chỉ cho điều đầu tiên trong mảng lịch, rõ ràng.

+0

Tháo '' ..schedule là một biến, không phải là một chuỗi. Ngoài ra jQuery sẽ mã hóa mảng của bạn như một đối tượng JSON bạn sẽ cần phải giải mã trên máy chủ. – gpasci

+1

Trừ khi tôi bị nhầm lẫn, Lịch biểu không phải là một mảng các mảng. Nó là một mảng các đối tượng, vì 'dữ liệu' là một đối tượng. – xbonez

+0

Bất kỳ lý do cụ thể nào mà bạn không sử dụng 'type: 'JSON''? –

Trả lời

3

Đảm bảo bạn đang sử dụng đúng phiên bản jQuery. Trong các phiên bản trước đó, bạn đã phải vượt qua một sting; phiên bản mới sử dụng "đoán thông minh" trên biến số data. Bạn có thể nói rõ ràng với jQuery rằng bạn đang truyền cho nó một đối tượng javascript với tham số dataType, hoặc bạn có thể để jQuery tìm ra nó.

Documentation

jQuery.ajax() - http://api.jquery.com/jQuery.ajax/

2

đèo nó như JSON:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: {schedule: schedule}, 
    type: 'POST', 
    dataType: 'JSON' 
}); 

Nó sẽ gửi một chuỗi JSON mã hóa vào máy chủ, mà ngôn ngữ server-side có thể phân tích cú pháp. (trong PHP, nó được thực hiện với json_decode()).

+1

Tôi đang chuyển sang json_deocde()? $ _POST ['lịch biểu']? – Ben

+0

@Ben: Có. 'schedule' sẽ bao gồm chuỗi JSON. – xbonez

+0

Dù bằng cách nào, tôi vẫn không nhận được gì. Tôi đã thử làm 'loại: 'POST'' và' loại:' JSON'' với một trong hai sự kết hợp của dữ liệu và tôi tiếp tục nhận được một giá trị null. Điều gì có thể sai? Nếu tôi thực hiện 'console.log (schedule)' trước phần ajax, tôi có thể thấy tất cả các đối tượng của mình để tôi biết chúng đang ở đó. – Ben

11

Thuộc tính data phải là một đối tượng.

gì bạn có thể làm là thế này:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: {schedule: schedule}, 
    type: 'POST' 
}); 

Vì vậy, nếu bạn nhận được này ví dụ như trong PHP bạn có $_POST["schedule"]. Điều đó hoàn toàn giống với JavaScript của bạn.

Ohh vâng tôi đã quên ... cũng có một cái nhìn tại .serialize().serializeArray()!

+0

Tài liệu jQuery hiện tại nói rằng nó có thể là một đối tượng, chuỗi hoặc một mảng. –

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