如何通过AJAX将二维JavaScript数组传递给PHP并访问数据?
解决AJAX传递二维数据到PHP的问题
问题根源
你在JS里错误地用数组([])存储键值对数据,JS数组是索引型结构,字符串键(比如items1)会被当作数组对象的附加属性而非数组元素,jQuery处理AJAX数据时不会包含这些属性,导致PHP端接收不到对应内容。
方案1:直接传递JS对象(推荐,适合简单结构)
步骤1:修正JS的数据定义
把数组改成对象,用{}替代[]:
var data = {}; data['items1'] = ["item1_1", "item1_2"]; data['items2'] = ["item2_1", "item2_2"];
步骤2:AJAX代码保持不变
jQuery会自动将对象编码为表单格式,无需额外处理:
jQuery.ajax({ type: "POST", url: ajax_site_url, dataType: 'json', data: { action: "my_php_case", data: data, }, success: function(response) { }, });
步骤3:PHP端获取数据
现在你最初写的代码就能正常拿到数据:
$items1 = $_POST['data']['items1']; // 测试输出:print_r($items1); 会得到 Array ( [0] => item1_1 [1] => item1_2 )
方案2:传递JSON字符串(适合复杂嵌套结构)
如果需要传递更复杂的嵌套数据结构,可以用这种方式:
步骤1:JS端处理数据并设置请求头
var data = {}; data['items1'] = ["item1_1", "item1_2"]; data['items2'] = ["item2_1", "item2_2"]; jQuery.ajax({ type: "POST", url: ajax_site_url, dataType: 'json', contentType: 'application/json', // 必须设置该请求头,告知PHP数据格式 data: JSON.stringify({ action: "my_php_case", data: data, }), success: function(response) { }, });
步骤2:PHP端解析JSON
此时数据不会存入$_POST,需要读取原始请求内容解析:
$rawData = file_get_contents('php://input'); $requestData = json_decode($rawData, true); // true将JSON转为关联数组 $items1 = $requestData['data']['items1']; // 测试输出:print_r($items1);
内容的提问来源于stack exchange,提问作者eligolf
相关产品推荐
相关产品推荐

