jQuery Ajax请求JSON解析报错:unexpected non-whitespace character如何解决?
问题原因与解决办法
问题根源
你的PHP代码同时调用了myFunctionA()和myFunctionB(),两个函数都通过echo输出了独立的JSON字符串,最终返回给前端的是两个JSON对象直接拼接的内容,比如:
{"error":0,"message":"Hello World"}{"error":0,"message":"Hello again"}
这种格式不符合JSON规范,所以$.parseJSON()解析时触发语法错误。
解决办法
根据你的需求选择以下方案:
方案1:只保留一个函数的返回结果
直接删掉其中一个函数调用,比如只保留myFunctionA();,这样PHP只会输出单个合法的JSON对象,前端就能正常解析。
修改后的PHP代码:
myFunctionA(); function myFunctionA() { echo json_encode(array('error' => 0, 'message' => "Hello World")); } function myFunctionB() { echo json_encode(array('error' => 0, 'message' => "Hello again")); }
方案2:需要同时返回两个函数的结果
修改PHP逻辑,让两个函数返回数组而非直接输出,然后合并成一个统一的数组再输出JSON:
// 合并两个函数的返回值并输出 $result = array( 'functionA' => myFunctionA(), 'functionB' => myFunctionB() ); echo json_encode($result); // 修改函数,返回数组代替直接echo function myFunctionA() { return array('error' => 0, 'message' => "Hello World"); } function myFunctionB() { return array('error' => 0, 'message' => "Hello again"); }
此时后端返回的是合法的嵌套JSON,前端解析后可以通过response.functionA和response.functionB分别获取两个函数的结果。
额外优化
jQuery的$.post可以自动解析JSON,只要后端添加响应头声明内容类型,同时前端指定dataType为json,就不用手动调用$.parseJSON():
- PHP添加响应头:
header('Content-Type: application/json'); - 前端修改代码:
$.post("ajax/myFile.php", {myValue: "test"}, function(response) { console.log(response); // 直接使用解析好的对象 }, 'json');
内容的提问来源于stack exchange,提问作者Trombone0904
相关产品推荐
相关产品推荐

