正如我所知道的,使用 ajax 您可以将数据发送到服务器,但我对发送数组进行发布感到困惑,而XMLHttpRequest
不是使用任何像 jQuery 这样的库。我的问题是,是否可以发送一个数组来php
使用XMLHttpRequest
以及如何jQuery
将一个数组发送到 php,我的意思是 jQuery 是否做任何额外的工作来将一个数组发送到服务器(php $_POST)?
4 回答
好吧,您只能发送一串字节。“发送数组”是通过序列化(制作对象的字符串表示)数组并发送来完成的。然后,服务器将解析字符串并从中重新构建内存中的对象。
所以发送[1,2,3]
到 PHP 可能会像这样发生:
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)
测试.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)
顺便说一句,使用 jQuery,您只需执行以下操作:
$.post( "test.php", JSON.stringify(a) );
这取决于您选择打包数据结构的协议。最常用的两种是 XML 和 JSON。两者都有声明数组的方法:
JSON:['one thing', 'another thing']
XML:<things><thing name='one thing' /><thing name='another thing' /></things>
并且两者都不需要服务器进行任何重大的额外工作。在许多情况下,它实际上会减少工作量,因为您不需要使用命名约定来区分它们。
您想发送一个 JSON 对象(可以是一个数组)。如果您正在使用 php使用 XMLHttpRequest w/o jQuery 将 JSON 数据发送到 PHP,请检查这一点。
更多关于 JSON:http: //json.org/
jQuery JSON 示例:JQuery 和 JSON
另一种方式,如果你想使用x-www-form-urlencoded内容类型通过 AJAX 向 PHP 发送数据,你必须这样做:
var array = [1, 2, 3];
//variable to concat POST parameters
var params = "";
for(var i = 0; i < array.length; i++){
params += "array[]=" + array[i] + "&";
}
//Remove the last char which is '&'
params = params.substring(0, params.length -1);
var http = new XMLHttpRequest();
http.open("POST", "http://localhost/your_script.php");
http.onload = function (){
//if response status is OK
if(http.status === 200){
console.log(JSON.parse(http.response));
}else{
//handle response if status is not OK
}
};
//set content type as x-www-form-urlencoded
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
//send the request with parameters
http.send(params);//params = "array[]=1&array[]=2&array[]=3"
your_script.php:
<?php
//check if index "array" on POST is defined
if(isset($_POST["array"])){
//write a JSON body
echo json_encode(["message" => "Received"], JSON_FORCE_OBJECT);
}