2012-08-23 34 views
5

Như tôi biết bằng cách sử dụng ajax bạn có thể gửi dữ liệu đến máy chủ nhưng tôi đang bối rối về việc gửi một mảng để đăng bằng cách sử dụng XMLHttpRequest không phải bất kỳ thư viện như jQuery. Câu hỏi của tôi là, có thể gửi một mảng đến php sử dụng XMLHttpRequest và cách jQuery gửi một mảng tới php, tôi có nghĩa là jQuery thực hiện thêm bất kỳ công việc nào để gửi mảng tới máy chủ (php $ _POST)?Làm thế nào để gửi mảng bằng cách sử dụng XMLHttpRequest đến máy chủ

Trả lời

10

Bạn không thể gửi bất kỳ điều gì ngoài một chuỗi byte. "Gửi mảng" được thực hiện bằng cách serializing (làm cho chuỗi đại diện của các đối tượng) mảng và gửi đó. Máy chủ sau đó sẽ phân tích cú pháp chuỗi và xây dựng lại các đối tượng trong bộ nhớ từ nó.

Vì vậy, gửi [1,2,3] qua để PHP có thể xảy ra như vậy:

var a = [1,2,3], 
    xmlhttp = new XMLHttpRequest; 

xmlhttp.open("POST", "test.php"); 
xmlhttp.setRequestHeader("Content-Type", "application/json"); 
xmlhttp.send('[1,2,3]'); //Note that it's a string. 
          //This manual step could have been replaced with JSON.stringify(a) 

test.php:

$data = file_get_contents("php://input"); //$data is now the string '[1,2,3]'; 

$data = json_decode($data); //$data is now a php array array(1,2,3) 

Btw, với jQuery bạn sẽ chỉ làm:

$.post("test.php", JSON.stringify(a)); 
+1

Cảm ơn bạn . bạn có thể giải thích 'file_get_contents (" php: // input ");'? –

+1

@Red nó là đại diện thô của cơ thể yêu cầu. Xem http://php.net/manual/en/wrappers.php.php. Ví dụ: hãy xem xét gửi biểu mẫu bình thường, trong đó bạn có '$ _POST [" key "] ===" giá trị "'. Nội dung của '" php: // input "' trong trường hợp này là '" key = value "', đó là những gì PHP được sử dụng để xây dựng mảng '$ _POST' cho bạn. Bạn cần sử dụng nó ở đây vì khi đăng JSON, php không điền '$ _POST' (vì' $ _POST' chỉ hoạt động cho biểu mẫu chứ không phải JSON). – Esailija

+0

Sau đó, làm thế nào tôi nhận được dữ liệu như '$ name = $ _ POST ['name']' khi tôi sử dụng '$ .post'? –

1

đó phụ thuộc vào giao thức bạn chọn gói cấu trúc dữ liệu của bạn. 2 thường được sử dụng nhất là XML và JSON. Cả hai đều có cách để khai báo một mảng:

JSON: ['one thing', 'another thing']

XML: <things><thing name='one thing' /><thing name='another thing' /></things>

và không sẽ mất bất kỳ công việc thêm đáng kể bởi máy chủ. Trong nhiều trường hợp, nó sẽ thực sự giảm bớt công việc vì bạn không cần sử dụng quy ước đặt tên để phân biệt giữa chúng.

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