11

正如我所知道的,使用 ajax 您可以将数据发送到服务器,但我对发送数组进行发布感到困惑,而XMLHttpRequest不是使用任何像 jQuery 这样的库。我的问题是,是否可以发送一个数组来php使用XMLHttpRequest以及如何jQuery将一个数组发送到 php,我的意思是 jQuery 是否做任何额外的工作来将一个数组发送到服务器(php $_POST)?

4

4 回答 4

16

好吧,您只能发送一串字节。“发送数组”是通过序列化(制作对象的字符串表示)数组并发送来完成的。然后,服务器将解析字符串并从中重新构建内存中的对象。

所以发送[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) );
于 2012-08-23T17:33:45.547 回答
1

这取决于您选择打包数据结构的协议。最常用的两种是 XML 和 JSON。两者都有声明数组的方法:

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

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

并且两者都不需要服务器进行任何重大的额外工作。在许多情况下,它实际上会减少工作量,因为您不需要使用命名约定来区分它们。

于 2012-08-23T17:26:57.343 回答
0

您想发送一个 JSON 对象(可以是一个数组)。如果您正在使用 php使用 XMLHttpRequest w/o jQuery 将 JSON 数据发送到 PHP,请检查这一点。

更多关于 JSON:http: //json.org/

jQuery JSON 示例:JQuery 和 JSON

于 2012-08-23T17:22:07.363 回答
0

另一种方式,如果你想使用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);

}
于 2022-02-07T11:18:27.363 回答