通过AJAX实现JSON数据与服务器双向传输的操作步骤问询
嘿,我看你已经摸清楚前后端用JSON交互的大致方向了,不过可能对每一步的执行顺序和细节还有点拿不准,我帮你把整个流程拆解得更清晰,顺便补上容易踩的小坑:
一、前端提交数据到服务器的完整流程
咱们按实际执行的先后顺序来梳理:
- 用户在页面输入内容,点击提交按钮(触发前端的点击事件)
- 前端先把用户输入的内容整理成JavaScript对象,比如从表单里取值:
const userInput = { username: document.getElementById('username').value, message: document.getElementById('message').value }; - 用
JSON.stringify(userInput)把JS对象转换成JSON字符串——这一步很关键,因为HTTP请求的请求体只能是文本格式,JSON字符串是前后端通用的文本数据格式 - 发起HTTP请求(比如用
fetch),一定要设置请求头Content-Type: application/json,告诉服务器“我发的是JSON数据”,示例代码:fetch('/submit.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(userInput) }) .then(response => response.json()) .then(data => console.log('服务器返回:', data)); - 服务器端PHP接收数据:这里要注意,
$_POST默认只能处理表单编码(application/x-www-form-urlencoded)的数据,所以咱们得用file_get_contents('php://input')获取请求体的原始内容,再用json_decode()转成PHP能识别的数组/对象:// 获取前端发送的JSON字符串 $rawJson = file_get_contents('php://input'); // 转成PHP关联数组(第二个参数true表示转数组,不写的话是对象) $userData = json_decode($rawJson, true); // 之后就可以用$userData['username']、$userData['message']来操作数据啦
二、服务器返回JSON数据给前端的流程
同样按顺序来:
- 用户触发获取数据的操作(比如点击“加载我的数据”按钮)
- 前端发起HTTP请求到对应的PHP接口(GET/POST都可以,看你的需求)
- PHP端从数据库、文件或者内存里拿到要返回的数据,整理成PHP数组/对象,比如:
// 假设从数据库查到了用户信息 $userInfo = [ 'status' => 'success', 'data' => [ 'name' => '张三', 'email' => 'zhangsan@example.com' ] ]; - 用
json_encode($userInfo)把PHP数据转换成JSON字符串,如果要保留中文不转义,记得加JSON_UNESCAPED_UNICODE参数:$jsonResponse = json_encode($userInfo, JSON_UNESCAPED_UNICODE); - PHP必须设置响应头
Content-Type: application/json,告诉前端“我返回的是JSON数据”,然后输出JSON字符串:header('Content-Type: application/json'); echo $jsonResponse; exit; // 输出后结束脚本,避免多余内容干扰 - 前端接收到响应后,用
response.json()(fetch的写法)把JSON字符串转回JS对象,然后就可以用这些数据更新页面了:fetch('/get-data.php') .then(response => response.json()) .then(data => { // 用data更新页面,比如把用户名显示出来 document.getElementById('user-name').textContent = data.data.name; });
几个容易踩的小坑提醒
- 前端发JSON时一定要设置
Content-Type: application/json,不然服务器可能识别不了 - PHP用
json_decode时,如果返回null,大概率是JSON格式有问题,可以用json_last_error_msg()排查错误 - 返回中文时记得加
JSON_UNESCAPED_UNICODE,不然中文会变成\uXXXX的转义字符
内容的提问来源于stack exchange,提问作者user9623870
相关产品推荐
相关产品推荐

