PHP RESTful API中GET请求JSON经$.ajax解析异常问题求助
解决AJAX解析PHP返回JSON时得到"1"的问题
我来帮你排查这个问题——后端返回的JSON明明是正确的,但前端解析后却得到"1",大概率是这几个细节没处理好:
1. 给AJAX请求指定dataType并去掉手动JSON.parse
你当前的AJAX代码没有指定dataType,jQuery会自动尝试推断响应类型,但如果服务器返回的HTTP头里没有明确标记Content-Type: application/json,jQuery可能会把响应当成普通文本处理,甚至出现解析异常。
直接显式设置dataType: 'json',jQuery会自动帮你完成JSON解析,不用再手动调用JSON.parse():
$.ajax({ method: "GET", url: "api.php/loadComment/" + $('#ad_id').val(), dataType: 'json', // 显式指定响应为JSON类型 done: function(data) { console.log(data); // 直接使用解析好的对象 console.log(data.data); // 这里就能拿到你的评论数组了 }, error: function(xhr) { // 加个错误回调,方便排查问题 console.log("实际返回内容:", xhr.responseText); } });
2. 确保PHP端输出纯JSON并设置正确响应头
有时候后端看似返回了正确的JSON,但可能存在额外输出(比如代码开头的空格、换行,或者其他echo/print语句),这些会破坏JSON结构;另外,没有设置正确的Content-Type头,也会导致前端解析出错。
修改你的PHP代码,加上响应头并确保输出后立即终止脚本:
case 'GET': // 设置正确的JSON响应头 header('Content-Type: application/json'); $comments["data"] = Comment::returnAll($db, $request[1]); echo json_encode($comments); exit; // 终止脚本,防止后续代码产生额外输出 break;
3. 排查路由是否正确匹配
你提到解析后得到"1",也有可能是你的请求路径api.php/loadComment/xxx没有正确匹配到GET分支,后端返回了其他内容(比如某个操作的成功状态码"1")。
通过上面AJAX的error回调,你可以打印出xhr.responseText,确认实际返回的内容是不是你在Network面板里看到的JSON。如果不一样,那就要检查你的路由解析逻辑,确保$method和$request[1]的取值是正确的。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

