Ajax解析PHP文件返回的JSON数据时控制台输出为空问题求助
问题原因
- 重复解析JSON报错
你在$.ajax配置中已经指定了dataType: "json",jQuery会自动将后端返回的JSON字符串转换为JavaScript对象,此时success回调的入参data已经是对象类型。再调用$.parseJSON(data)相当于对非字符串类型做JSON解析,会抛出语法异常,导致控制台无预期输出。 - PHP语法错误
你给出的PHP代码起始标签为<php,正确的PHP起始标签是<?php,缺少问号会导致PHP代码不被服务器解析,直接将代码原样返回,不符合JSON格式要求。 - 字符转码异常
你对$end_result做了iconv('Windows-1252', 'UTF-8', $end_result)转码操作,如果服务器端该变量的原始编码不是Windows-1252,转码会返回空值,破坏返回的JSON结构。
解决方案
- 调整Ajax的success回调逻辑,删除手动JSON解析代码,直接使用已解析的
data对象:
success: function(data){ console.log(data); // 取对应字段直接用 data.date / data.result / data.medias / data.country 即可 }
- 修正PHP代码起始标签,将开头的
<php替换为<?php。 - 确认
$end_result的原始编码,如果本身为UTF-8,直接删除iconv转码逻辑,避免转码失败:
'result' => $end_result,
- 临时添加Ajax的error回调,快速定位请求阶段的异常:
$.ajax({ type: 'post', url: "t.php", data: { styles: style2 , country: radio_btn}, dataType: "json", success: function(data){ console.log(data); }, // 新增错误回调排查问题 error: function(xhr, errorMsg){ console.log("请求异常:", errorMsg, "返回原始内容:", xhr.responseText); } })
内容的提问来源于stack exchange,提问作者Alev Mustafa
相关产品推荐
相关产品推荐

