0

次のような JavaScript の JSON 応答があります。

{"opt1":"2.92","opt2":"4.24","opt3":"6.36"};

これは、console.log(data)データが応答である場所を適用した結果です。

success: function(data){
            console.log("Ajax succeeded");
            console.log(data);
            console.log(data.opt1);
        },

しかし、opt1 の値にアクセスできません。コンソールには未定義と表示されます。なぜこれが当てはまるのでしょうか?JSONは有効です、私はそれをチェックしました。

編集

この場合、サーバーは PHP の json_encode 関数を使用して、配列を JSON に変換します。最後にセミコロンを削除しようとしましたが、これでも opt1 の値が未定義になります。また、ajax 呼び出しの dataType を設定しようとしましたが、予期しない文字があることを示すエラーが発生しました。

4

4 に答える 4

5

オブジェクトではなく、data実際にはstringのように聞こえます。

あなたがする必要がある2つのこと:

最初: そのセミコロンが実際にある場合、取得している応答は有効な JSON ではありません。サーバー側のセミコロンを削除して、これを修正する必要があります。(ただし、以下を参照してください。)

2 番目: 次に、JSON 文字列がオブジェクトに逆シリアル化されていることを確認する必要があります。それを行ういくつかの方法:

  1. サーバーが正しいContent-Typeヘッダー ( application/json) で応答すると、自動的に発生します。これが最善の方法です。

  2. 何らかの理由でそうではなく、そうすることができない場合は、電話に追加dataType: 'json'してください。ajax

  3. 何らかの理由でそれができない場合は次のように手動で JSON 文字列を解析できます$.parseJSON

    data = $.parseJSON(data);
    

    (ブラウザにビルトインがある場合は、それparseJSONを喜んで使用します。ブラウザにビルトインJSON.parseがない場合、jQuery は独自のものを使用します。)


何らかの理由で無効な;サーバー側を削除できない場合は、回避できます。

  1. 通話dataType: 'text'に追加ajax

  2. success

    data = $.parseJSON(data.replace(/;$/, ''));
    

    セミコロンがある場合は削除し、結果を解析します。

于 2013-05-16T11:48:36.463 に答える
0

jQuery.parseJSON(obj)を試してください。

jQuery.parseJSON() Takes a well-formed JSON string and returns the resulting JavaScript object.

次のように使用します。

var str = '{"opt1":"2.92","opt2":"4.24","opt3":"6.36"}';
var obj = jQuery.parseJSON(str);
console.log(obj.opt1);
于 2013-05-16T11:51:20.467 に答える