6

getJSONメソッドを使用してjQueryで記述したカスタムJSONフィードをフェッチしようとしています。不明な理由で、URLcache_gen.php?location=PL4が最後から削除され、[object%20Object]に置き換えられたため、404エラーが発生したようです。

これが私が使用しているjQueryです:

var fetchData = function() {

    if (Modernizr.localstorage) {

        var api_location = "http://weatherapp.dev/cache_gen.php";
        var user_location = "PL4";
        var date = new Date();

        console.log(api_location + '?location=' + user_location);

        jQuery.getJSON({
            type: "GET",
            url: api_location + '?location=' + user_location,
            dataType: "json",
            success: function(jsonData) {
                console.log(jsonData);
            }
        });

    } else {
        alert('Your browser is not yet supported.  Please upgrade to either Google Chrome or Safari.');
    }
}

fetchData();

コンソールログから、URL文字列が次のように正しく計算されていることがわかります。http://weatherapp.dev/cache_gen.php?location=PL4

ただし、コンソールの2行目は次のとおりFailed to load resource: the server responded with a status of 404 (Not Found)です。

誰かがこれで私を正しい方向に向けることができますか?

更新19/01/201323:15

さて、私はちょうどそれがを使用してドキュメントに完全に適合するように変換しました$.ajax。また、失敗イベントを追加し、それに渡されるすべてのデータをログに記録しました。

var fetchData = function() {

    if (Modernizr.localstorage) {

        var api_location = "http://weatherapp.dev/cache_gen.php";
        var user_location = "PL4";
        var date = new Date();

        var url = api_location + '?location=' + user_location;

        console.log(url);

        jQuery.ajax({
            type: "GET",
            url: api_location + '?location=' + user_location,
            dataType: "json",
            success: function(jsonData) {

                console.log(jsonData);
            },
            error: function( jqXHR, textStatus, errorThrown ) {
                console.log('textStatus: ' + textStatus );
                console.log('errorThrown: ' + errorThrown );
                console.log('jqXHR' + jqXHR);
            }
        });

    } else {
        alert('Your browser is not yet supported.  Please upgrade to either Google Chrome or Safari.');
    }
}

fetchData();

この後、私のコンソールは私に次の情報を提供します:

http://weatherapp.dev/cache_gen.php?location=PL4
download_api.js:44textStatus: parsererror
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string
download_api.js:46jqXHR[object Object]

JSONフィードのヘッダーが最新であり、フィードが確実に有効なJSONを提供していることを確認しました(サードパーティのサービスフィードを効果的にキャッシュして、APIのコストを節約します)。

4

3 に答える 3

6

このエラーが表示される理由:

http://weatherapp.dev/cache_gen.php?location=PL4
download_api.js:44textStatus: parsererror
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string
download_api.js:46jqXHR[object Object]

JSONが無効であるためです。応答がサーバーから正しく返される場合でも、dataTypeが'json'であり、返される応答が適切にフォーマットされていないJSONである場合、jQueryはエラー関数パラメーターを実行します。

http://jsonlint.comは、JSON文字列の有効性を確認するための非常に迅速で簡単な方法です。

于 2013-01-20T13:17:00.817 に答える
4

私は今日同じ問題に遭遇していました。私の場合、JSONオブジェクトを「location」という名前の変数に割り当てていました。これはWindowsのJavaScriptで予約語であり、明らかにwindows.locationの省略形です。そのため、ブラウザは[object%20Object]が追加された現在のURLにリダイレクトされました。同じことが起こった場合は、「location」以外の変数名を使用するだけです。これが誰かを助けることを願っています。

于 2014-11-11T19:44:35.347 に答える
0

実際の関数の使用法を確認してください。

http://api.jquery.com/jQuery.getJSON/

$.getJSONオブジェクトパラメータをのように渡すことはできません$.ajax。コードは次のようになります。

    jQuery.getJSON('api_location + '?location=' + user_location)
         .done(function() {
            //success here
         })
         .fail(function() {
           //fail here
         });

少し明確にするために、これは最終的に。$.getJSONで呼び出す「ラッパー関数」です。これは、上記のリンクで確認できます。$.ajax{type:'get',dataType:'JSON'}

于 2013-01-19T22:58:00.253 に答える