0

これは何よりも手順の問題です。なぜこれが起こるのか知りたいのですが、ECMA スクリプトのドキュメント内でこの「機能」に関するドキュメントを見つけることができないようです。

サーバーに対して jQuery 内で AJAX 呼び出しを行うと、次の JSON 応答がページに返されます。

{"version":"v1","status":"OK","timestamp":"2013-02-14 10:32:45","data":"true","error":""}

この文字列を使用して、jQuery.parseJSON(string); を呼び出す必要があります。オブジェクトとして取得し、オブジェクトとして参照できるようにします。

ただし、サーバーが次のようなものを返す場合:

{"version":"v1","status":"OK","timestamp":"2013-02-14 10:12:19","data":{"a":"asgsadfga","b":false,"c":[]},"error":""}

Javascript は、解析する必要なく、これをオブジェクトとして自動的に読み込みます。サーバーから文字列として返されたにもかかわらず、この例ではネストされたオブジェクトが返されるため、Javascript はすぐにそれを認識し、文字列を解析してくれるようです。

これは期待される機能ですか?もしそうなら、誰かが私にこれのドキュメントを教えてもらえますか?

編集:

問題のある AJAX 呼び出しは次のとおりです。

    jQuery.ajax({
        url: url,
        type: 'GET',
        async: false,
        success: function (result) {
            console.log(result)
        }
4

3 に答える 3

2

サーバーが適切な Content-Type 応答 HTTP ヘッダーを設定していることを確認してください。

Content-Type: application/json

そのため、jQuery は、サーバーから返された JSON 文字列を自動的に解析して、成功コールバックの引数として渡される JavaScript オブジェクトに変換します。

または、何らかの理由で制御できない壊れたサーバー側スクリプトがある場合は、dataTypeパラメータを設定して、jQuery に結果を JSON として解析させることができます。

$.ajax({
    url: '/script.cgi',
    type: 'POST'
    dataType: 'json',
    success: function(result) {
        // result will be a javascript object 
    }
});

しかし、明らかに適切なことは、適切な Content-Type 応答ヘッダーを返すようにサーバー側スクリプトを修正することです。

于 2013-02-14T17:49:24.713 に答える
1

dataTypeの下の jQuery API ドキュメントの ajax() によると:

dataType (デフォルト: Intelligent Guess (xml、json、script、または html))Type: String サーバーから返されるデータのタイプ。何も指定されていない場合、jQuery は応答の MIME タイプに基づいてそれを推測しようとします (XML MIME タイプは XML を生成し、1.4 では JSON は JavaScript オブジェクトを生成し、1.4 ではスクリプトがスクリプトを実行し、その他はすべて文字列として返されます)。

お役に立てれば。

于 2013-02-14T17:55:28.713 に答える
0

通話に参加することを指定する必要dataTypeがありjsonます$.ajax。dataType は、サーバーから受信する予定の MIME です。contentType は、サーバーが期待しているものです。

于 2013-02-14T17:52:52.223 に答える