如何在同一文件内将JavaScript对象传递给PHP进行后续处理
问题核心原理
PHP属于服务端语言,会在页面返回到用户浏览器之前就完成执行;而JS属于客户端语言,是页面加载到浏览器之后才运行的。二者运行的时间、环境完全隔离,你把代码写在同一个文件里也没法直接互相传值,必须通过HTTP请求完成数据传递。
具体修改方案
JS端修改
你注释的jQuery POST逻辑方向正确,用原生XMLHttpRequest可以直接调整如下:
- 使用
JSON.stringify()将JS对象转为JSON字符串,替换你注释里写错的$parseJson - 直接向当前页面地址发POST请求即可,不需要额外新建PHP文件
// 把你原来注释的代码替换成以下内容 const json_kwc = JSON.stringify(testKeyWordAppearance); let postXhr = new XMLHttpRequest(); postXhr.open("POST", window.location.href); postXhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); postXhr.send("obj=" + encodeURIComponent(json_kwc));
PHP端修改
同文件的PHP需要先判断是否收到POST传参,避免页面首次加载时报错,写入CSV的逻辑可以直接加在判断分支内:
<?php if (!empty($_POST['obj'])) { $mygetter = $_POST['obj']; $values = json_decode($mygetter, true); // 第二个参数传true可以直接转为关联数组方便处理 // 写入CSV示例 $csvFile = fopen('test_result.csv', 'a'); // 首次写入可以自行添加表头行 fputcsv($csvFile, [ $values['paragraph'], $values['word'], $values['result Local'], $values['result'], $values['responseT'], $values['Test'] ]); fclose($csvFile); // 处理完成直接退出,避免返回整个页面HTML给POST请求 exit; } ?>
注意事项
- 提前确认CSV文件所在目录的写入权限,避免写入失败
- 发送POST请求时对JSON字符串做URL编码,避免特殊字符导致传值异常
- 如果需要处理请求成功的回调,可以给
postXhr添加onreadystatechange事件监听请求状态
内容的提问来源于stack exchange,提问作者Murfs
相关产品推荐
相关产品推荐

