我在两个地方观察到了这一点。两者都是 AJAX 调用,它们返回一些 JSON,用于填充两个选择下拉列表的选项。我目前正在使用 jquery 选择的插件对这些下拉菜单应用增强功能,我想是一些变化导致了这个问题。我不确定到底是什么,因为我恢复了出现解析错误的那个模块的更改,但错误仍在发生。
所以,我问,一般来说,无效 JSON 突然导致问题的原因可能是什么。请注意,返回的 JSON 一直是无效的。我没有对此进行任何更改。此外,我没有对 $.ajax 调用进行任何更改。JSON 样本 -
{
"result":"success",
"reqparams":
{"site_id": {"name":"site_id","display_name":"","possible_values":"","default_value":"","editable":"1","description":"the ad slot id provided by your 4th Screen account manager",},},
"optparams": {
"keywords": {"name":"keywords","display_name":"","possible_values":"","default_value":"","editable":"1","description":"",},
"reachability": {"name":"reachability","display_name":"","possible_values":"wifi[ADMARVEL_SEP]cell","default_value":"","editable":"1","description":"Information about how the device is being connected to the internet.",},
},
}
注意:额外的逗号,例如在“描述”属性的值之后。
更新 生成 JSON 的代码 - 示例代码 - 请忽略未使用 json_encode 的事实。这是非常古老的代码。
if (is_array($reqd_params) && count($reqd_params) > 0)
{
header("HTTP/1.1 200 OK");
echo '{
"result":"success",
"reqparams": {';
foreach ($reqd_params as $paramKey => $paramValArr)
{
echo '"'.$paramValArr['name'].'": {';
echo '"name":"'.$paramValArr['name'].'",';
echo '"display_name":"'.$paramValArr['display_name'].'",';
echo '"possible_values":"'.$paramValArr['possible_values'].'",';
echo '"default_value":"'.$paramValArr['default_value'].'",';
echo '"editable":"'.$paramValArr['editable'].'",';
echo '"description":"'.addslashes($paramValArr['description']).'",';
echo '},';
}
echo '}';
if(!empty($reportData) && $reportData != -1)
{
echo',';
echo '"reportData":"'.htmlspecialchars($reportData).'"';
}
echo ' }';
}
客户端代码
$.ajax({
type: "POST",
url: posturl,
data : data,
dataType: "json",
async: false,
success: function(msg){
//not coming here
},
error: function(jqXHR, textStatus, errorThrown){
alert("error "+errorThrown);
//alerts parse error
}
});