私がこれを観察した場所は2つあります。どちらも、AJAX呼び出しであり、2つの選択ドロップダウンのオプションを設定するために使用されるJSONを返します。私は現在、jqueryの選択したプラグインを使用してこれらのドロップダウンに拡張機能を適用しようとしています。この問題を引き起こす変更がいくつかあります。解析エラーが発生しているモジュールの変更を元に戻したので、正確に何がわかりませんが、エラーはまだ発生しています。無効なjsonが突然解析エラーを投げ始めました
ですから、私は一般的に、無効な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
}
});
このJSONを生成しているコードを投稿してください。問題は単純にすべての行に末尾のカンマを追加することです。アルゴリズムは各オブジェクトの最後のプロパティを検出するために変更する必要があります。 –
コードが有効なJSONを返すようにします。 *これまでに使っていた*経験は、意図的に間違ったJSONを提供したことに対する言い訳ではありません。 –
@Rob Wあなたに同意しますが、変更したものが無効なJSONが返される既存の場所をすべて破損する可能性があることを心配しています。私はすべての場所を修正することを忘れる可能性があります。 –