0

私がこれを観察した場所は2つあります。どちらも、2 つの選択ドロップダウンのオプションを入力するために使用される JSON を返す AJAX 呼び出しです。現在、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.",},
},
}

注: "description" 属性の値の後の余分なカンマ。

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
            }
                });
4

1 に答える 1

2

この事実は

I upgraded from jquery 1.3.2 to 1.6.4.

(コメントから)

また、jqueryコードが誤ったJSONを受け入れていた(たとえば、「間違った」ことを行っていた)が、現在は期待どおりに機能しているという事実が、質問のとおり、見られた動作の原因です。

解決策として、コードを本当に変更することができない場合は、期待される結果のデータ型を変更して、手動でspecialJSONコードを解析することができます。

于 2012-04-16T08:36:54.047 に答える