2012-04-16 19 views
0

私がこれを観察した場所は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 
      } 
       }); 
+0

このJSONを生成しているコードを投稿してください。問題は単純にすべての行に末尾のカンマを追加することです。アルゴリズムは各オブジェクトの最後のプロパティを検出するために変更する必要があります。 –

+0

コードが有効なJSONを返すようにします。 *これまでに使っていた*経験は、意図的に間違ったJSONを提供したことに対する言い訳ではありません。 –

+0

@Rob Wあなたに同意しますが、変更したものが無効なJSONが返される既存の場所をすべて破損する可能性があることを心配しています。私はすべての場所を修正することを忘れる可能性があります。 –

答えて

2

私はこの事実

I upgraded from jquery 1.3.2 to 1.6.4. 

(コメント)

とあなたのjqueryのコードが間違って受け入れるために使用されているという事実だと思いますJSON(のように:それは "間違って"何かをやっていました)しかし、現在期待どおりに動作し、見られる振る舞いのソースですあなたの質問があった。

解決策として、コードREALYを変更することはオプションではありません。予想される結果のデータ型を変更し、手動でコードspecialJSONを解析するだけです。

+1

すごい偉大な答え!無効なjsonを許可する方法は他にありませんか?1か所で簡単に変更できますか? –

+0

異なる(text?)データ型を試してみて、その文字列を '$ .parseJSON'で解析することができます。なぜそれがうまくいくのか分かりませんが、http://api.jquery.com/jQuery.parseJSON/のコメントは、 '.ajax'のパーサーがより厳格であることを意味しています。明らかにあなたの状況が違う大きなチャンスがあります。それでもそれはエラーを投げます。独自のバージョンのJSONから有効なJSONを作成し、その上に '$ .parseJSON'を呼び出すために、データ用に特別な関数を書くことに悩まされるかもしれません。 – Nanne

+0

私は同じことをやって、データ型を "text"に変更し、msg = $ .parseJSON(msg);すべてがうまくいった。これは問題ありませんが、無効なJSONが返されるすべての場所でこれを行うこの手順を省略するために、他にもいくつかの方法があるかどうかを尋ねています。jqueryが無効なJSONを受け入れることを許可していたのはなぜですか?だから、彼らは無効なJSONを許可するオプションを持っている可能性はありますか?ところで、この大いに助けてくれてありがとう。あなたのための+1。 –

関連する問題