有没有办法将多个数组传递给 PHP json_encode 并用 jQuery 解析它?

Posted

技术标签:

【中文标题】有没有办法将多个数组传递给 PHP json_encode 并用 jQuery 解析它?【英文标题】:Is there a way to pass multiple arrays to PHP json_encode and parse it with jQuery? 【发布时间】:2012-01-12 11:38:34 【问题描述】:

现在我有这个 php

$columns = array(*/Data*/);
echo json_encode($columns);

这是通过带有 JQuery 的 AJAX GET 请求发送的。

var columns = jQuery.parseJSON(response);

我希望能够在json_encode() 中发送多个数组。有什么方法可以做到这一点,您将如何使用 jQuery 解析它?

【问题讨论】:

PHP 和 javascript 都支持数组数组,因此只需将两个数组嵌入到父数组中并将父数组发送过来。 【参考方案1】:

当然,您可以发送一个数组数组。 PHP 关联数组将成为一个 javascript 对象。

在 PHP 中:

$data = array();
$data['fruits'] = array('apple','banana','cherry');
$data['animals'] = array('dog', 'elephant');
echo json_encode($data);

然后在 jQuery 上

var data = jQuery.parseJSON(response);

然后你可以做这样的事情来访问值

console.log(data.fruits[0]); // apple
console.log(data.animals[1]); // elephant

【讨论】:

清晰简洁的答案。但是不需要在 JavaScript 端产生 jQuery 的开销。 JSON.parse(response) 将使用纯 JavaScript 来完成。【参考方案2】:

代码应如下所示:

$columns = array(/*Data*/);
$columns1 = array(/*Data1*/);
echo json_encode(array($columns,$columns1));

在 jQuery 中使用

var columns_array=jQuery.parseJSON(response);
columns=columns_array[0];
columns1=columns_array[1];

【讨论】:

另外,在浏览器中传输特殊字符(如引号)存在一些问题,我也喜欢将 base64 包裹在响应中【参考方案3】:
  $data1 = array();
  $data2 = array();
  $data1[] = array('apple','banana','cherry');
  $data2[] = array('dog', 'elephant');
  echo json_encode(array($data1,$data2));

在 ajax 中,

      console.log(response[0][0])//apple
      console.log(response[1][0])//dog.....

【讨论】:

【参考方案4】:

在我填充完所有数组后,即$array1_json$array2_json 等,

$number_of_array1elements = count($array1_json);
$number_of_array2elements = count($array2_json);
$number_of_array3elements = count($array3_json);

array_unshift($array1_json , $number_of_array1elements); 
// pushes element to the start of array1_json
array_unshift($array2_json , $number_of_array2elements);
array_unshift($array3_json , $number_of_array3elements);

对于其他数组也是如此。

echo json_encode( array_merge($array1_json, $array2_json, $array3_json) );

在您的 .js 文件中,使用:

var val = xmlhttp.responseText;
var jsonData = JSON.parse(val);
var number_of_array1elements = jsonData[0];
for (var i = 1; i <= number_of_array1elements; i++ ) 

    // use jsonData[i] to select the required element and do whatever is needed with it

var number_of_array2elements = jsonData[i];
for ( i = i+1; i <= number_of_array1elements+number_of_array2elements+1; i++ ) 

     // use jsonData[i] to select the required element and do whatever is needed with it

【讨论】:

以上是关于有没有办法将多个数组传递给 PHP json_encode 并用 jQuery 解析它?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将数组传递给外部 REXX 程序?

使用 PHP 将数组传递给 Ajax

如何将数组传递给 PHP 一个服务器的数组?

有没有办法将多个(和不同的)参数从闪电网络组件(LWC)中的 JS 传递给 Apex 控制器类?

将Javascript数组传递给PHP文件[重复]

有没有办法获取传递给函数的数组的大小?