Ajax实现JS二维数组传PHP失败,请求解决方案
问题:Ajax传递二维数组到PHP后跳转页面无法获取数据
嘿,我来帮你搞定这个Ajax的问题!你现在遇到的是新手常踩的典型坑,先给你拆解清楚问题根源,再给你两种实用的解决方案。
你尝试传递的二维数组示例是:num = [["StringA",0], ["StringB",1], ["StringC",2]];,先后试了两种Ajax写法,都能成功跳转但页面没输出,核心原因是:
问题根源
Ajax请求和后续的页面跳转是两个完全独立的HTTP请求!
- 当你用Ajax发POST请求给
database.php时,PHP确实收到了数据,但这个请求的响应只是返回给了Ajax,并没有在浏览器里展示; - 紧接着
window.location = "database.php"是发起了一个全新的GET请求,这个请求里完全没有之前POST的参数,所以PHP里isset($_POST["array"])会返回false,自然没有任何输出。
方案1:跳转后在页面读取数据(用Session存储)
如果你确实需要跳转到database.php页面展示数据,用Session来临时存储数组是最合适的方式:
第一步:优化JS代码(两种写法都可以,这里以第一种为例)
let num = [["StringA",0], ["StringB",1], ["StringC",2]]; $.ajax({ type: "POST", url: "database.php", data: { array : JSON.stringify(num) }, // 这里去掉了不匹配的contentType和processData,因为我们传的是表单格式数据 success: function() { window.location = "database.php"; } });
第二步:修改database.php代码
<?php session_start(); // 必须放在代码最开头,前面不能有任何输出(包括空格) // 处理Ajax的POST请求,把数据存到Session if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST["array"])){ $array = json_decode($_POST["array"], true); // 把JSON字符串转成PHP数组 $_SESSION['passed_array'] = $array; // 存储到Session exit; // 处理完Ajax请求就退出,不需要输出内容 } // 处理跳转后的GET请求,读取Session里的数据 if (isset($_SESSION['passed_array'])){ echo "Data is set<br>"; print_r($_SESSION['passed_array']); unset($_SESSION['passed_array']); // 可选:用完后删除Session数据,避免刷新页面重复显示 } else { echo "No data received"; } ?>
方案2:不跳转,直接在当前页面显示结果
如果不需要跳转到新页面,直接在当前页面展示PHP处理后的结果,这才是Ajax的常规用法:
第一步:修改JS代码
let num = [["StringA",0], ["StringB",1], ["StringC",2]]; $.ajax({ type: "POST", url: "database.php", data: { array : JSON.stringify(num) }, success: function(response) { // 把PHP返回的结果显示在页面的指定容器里(比如一个id为result的div) document.getElementById('result').innerHTML = response; } });
第二步:在你的HTML页面添加结果容器
<!-- 放在页面你想要显示结果的位置 --> <div id="result"></div>
第三步:修改database.php代码
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST["array"])){ $array = json_decode($_POST["array"], true); echo "Data is set<br>"; print_r($array); } ?>
补充:你原来两种写法的小问题
- 第一种写法里,你设置了
contentType: 'application/json',但传递的是{ array : JSON.stringify(num) }这种表单格式的数据,两者不匹配,导致PHP无法正确解析$_POST["array"]; - 第二种写法里,直接传
{array: num},jQuery会自动把二维数组转成array[0][0]=StringA&array[0][1]=0这类格式,PHP能通过$_POST["array"]拿到数组,但同样逃不过“跳转后新请求无参数”的问题。
内容的提问来源于stack exchange,提问作者Alice Smith
相关产品推荐
相关产品推荐

