7

次の ajax リクエストがあります。

        jQuery.ajax({
            async: true,
            type: "GET",
            url: url,
            data: data,
            dataType: "json",
            success: function(results){
                currentData = results;
            },
            error: function(xhr, ajaxOptions, thrownError){
                if (xhr.status == 200) {
                    console.debug("Error code 200");
                }
                else {
                    currentData = {};
                    displayAjaxError(xhr.status);
                }
            }
        });

何らかの理由で、エラー コールバックはイベントと呼ばれますが、http ステータス コードは 200 です。リクエストはOKです。どうしてこれなの?

4

3 に答える 3

10

問題は、URL から返された json データの形式が正しくない可能性があります。サーバーが実際に何かを返すとき、http ステータス コードは 200 です。しかし、それはデータが適切な json であることを意味しません。返された文字列化された json データが正しい形式であることを確認してください。

私はこれを難しい方法で学んだので、私は自分のゲストに答えています。json データで "-quote 文字をエスケープしていませんでした。これにより、非常に奇妙な動作が発生しました。幸いなことに、JSON 経由で配信されるデータからエスケープする必要がある文字は、ほとんど二重引用符文字だけです。(この問題の詳細: JSON ajax 戻り型に必要なエスケープ文字のリストはどこにありますか? )

于 2009-12-04T10:24:35.640 に答える
1

あなたのコールバックはページを返しますContent-type: application/jsonか? そうでない場合は、それが理由である可能性があります。

于 2009-12-04T10:24:21.443 に答える
0

Webサーバーを使用する代わりにfile:urlsを使用して多くのテストを行います。私のJSONコードは常に間違ったMIMEタイプになります。これを処理するために、次のコードを使用します。

$(document).ready(
    function (){

        myData = {};
        $.ajax({
            type: "GET",
            // url: "json.php?fn=jsonData.json",        // with Apache
            url: "jsonData.json",                       // As a file:/// URL
            contentType: "application/json; charset=utf-8",
            data: myData,
            beforeSend: function(x) {
                if(x && x.overrideMimeType) {
                    x.overrideMimeType("application/json; charset=UTF-8");
                }
            },
            dataType: "json",

            success: function(returnData){
                 $("#jsonData").html("Success:"+returnData.tag);
            },
            error: function(returnData) {
                 $("#jsonData").html("Error:"+returnData.tag);
            }
        });
    }
);

これにより、MIMEタイプがJSONデータに対して正しくなります。

于 2009-12-10T06:14:25.383 に答える