无效的json突然开始抛出解析错误

时间:2012-04-16 08:24:05

标签: jquery json parse-error

有两个地方我观察过这个。两者都是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
            }
                });

1 个答案:

答案 0 :(得分:2)

我会说这个事实

I upgraded from jquery 1.3.2 to 1.6.4.

(来自评论)

以及你的jquery代码用于接受不正确的JSON(如:它正在做一些“错误的”)但现在按预期工作的事实,这是所见行为的来源,正如你的问题所在。

作为一种解决方案,如果更改代码REALLY不是一个选项,您只需更改预期结果的数据类型,然后手动解析specialJSON代码。

相关问题