0

次の問題があります: JQuery / JavaScript経由でJSONファイルをダウンロードする必要があります。理論的には、これは非常に基本的なものです。API

私は試し$.ajaxてみましたが、その兄弟はすべて or のよう$.getです$.getJSON。私は常に200 OKを受け取りますが、私の Firebug はエラーを報告します。エラーを印刷すると、「エラー」と表示されるだけなので、それほど役に立ちません。

JSONファイルが壊れている可能性があることを読みました。ということで、プレーンテキストファイル(*.txt)でやってみました。同じ結果です。

JSON ファイルは有効です。バリデーターでチェックします。

私もContentTypeanddateTypeを試してjsonみましたjsonp...

私は基本的に次のようなものを使用しました(テスト目的で100万のバリエーションがあります):

$.ajax({
   url: 'http://www.myurl.com/api/v1/myfile.json',
   ...
   success: function(data) {
      console.log(data);
    },
   error: function(error) {
     console.log(error.statusText);
   }
});

ここで重要な何かが欠けていますか?AJAX 呼び出しの動作を変更するものが何もないように見えるのは、本当に奇妙です。

実際、ページをロードするときにJSONファイルを取得する必要があるため、AJAXは本当に必要ありません...

また、JSON ファイルは AJAX 呼び出し元と同じドメインにありません。

4

4 に答える 4

3

その URL は、データを取得しようとしているのと同じサーバー上にありますか?

そうでない場合は、JSONP を使用してのみ処理できるクロスドメイン リクエストに遭遇しました。そのため、JSON ファイル自体は JSONP 形式と互換性がある必要があります。互換性がない場合、jQuery はそれを処理できません (「jsonp」dataType を指定しても)。

PS: Firebug は常に応答コード 200 を表示しますが、そのような要求に対して空の応答本文を返します

于 2012-09-04T13:49:39.077 に答える
1

このようにセキュリティを無効にしてみてください

$.ajax( {
        type : 'GET',
        contentType : "application/json; charset=utf-8",
        url : surl,  \\specify  your url
        async : false,
        dataType : 'json',
        headers : {
            Accept : "application/json",
            "Access-Control-Allow-Origin" : "*"
        },
        crossDomain : true,
        success : SucceedFunc,
        error : function(data, textStatus, errorThrown) {
            console.log("error" + ' ' + JSON.stringify(data) + ' ' + textStatus + '  ' + errorThrown);
        }
    });
function SucceedFunc(data) {
               alert("success");
                   }

    }
于 2012-09-04T14:32:00.233 に答える
0

クロムを使用している場合は、cmd プロンプトに移動し、セキュリティを無効にしてクロムを実行します。pathwhere_chrome_is_located\chrome.exe --disable-web-security を使用してセキュリティを無効にし、html ページを実行できます。これはあなたを助けるかもしれないと思います。

于 2012-09-04T14:24:51.953 に答える
0

正しい方法でエラーをキャッチしようとしましたか?

$.ajax({
    url: 'http://www.myurl.com/api/v1/myfile.json',
    success: function(data) {
         console.log(data);
    },
    error: function(error) {
         console.log(error.message);
    }
});
于 2012-09-04T13:52:49.223 に答える