3

jQuery で JSON フィードを読み込んでいるときに構文エラーを報告する最善の方法は何ですか? 次のようなエラー報告設定を確立できます。

error: function(xhr){
    alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
}

ただし、呼び出した URL が有効なページ (JSON オブジェクトを含むページではないにもかかわらず) をロードした場合、この関数は起動しません。さらに、(少なくとも Firebug によると)jQuery.getJSONオブジェクトを実行する関数にオブジェクトを渡す前に構文エラーで中断するため、返されるデータを確認できません。

エラーを報告したい理由は、有効な JSON フィードを生成する URL をユーザーが提供したかどうかを確認する方法だからです。

これは、サーバーが応答する内容を制御する必要がある関連する回答です。Firebug が表示する構文エラーは次 のとおりです。

何か案は?ありがとう

4

4 に答える 4

3

関数をグローバル ajaxerror イベントにバインドできます

$(document).ajaxError(function(event, request, ajaxOptions, thrownError){
  if ( 4==request.readyState) { // failed after data has received
    alert(ajaxOptions['url'] + " did not return valid json data");
  }
  else {
    alert("something else wnet wrong");
  }
});
または $.getJSON() の代わりに $.ajax() を使用します
function foo() {
  // $.getJSON("http://localhost/test.txt", function(data){});
  $.ajax({
    type: "GET",
    url: "http://localhost/test.txt",
    success: function (data, textStatus) {
      alert("succuess");
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      alert("request failed: " + textStatus);
    },
    dataType: "json"
  });
}

編集:しかし、ajax(dataType:"json")getJSON() (単に .ajax(dataType:"json") を呼び出す) の両方がdata = window["eval"]("(" + data + ")")...これはあなたが望むものではないかもしれないことに注意してくださいスクリプトが要求する (任意の) データがわからない場合. これは、json データではなく html ドキュメントをフィードしたときに firebug が構文エラーをキャッチする理由を説明できます.
その場合は、より良い要求 dataType:"string" und run本格的な json パーサー ライブラリを介してデータを取得します。

于 2009-06-23T03:31:05.797 に答える
1

答えてくれたすべての人に感謝します。外部ドメインから JSON フィードを呼び出していたため、jQuery の AJAX 機能を使用してフィードを "json" ではなく "テキスト" としてプルすることはできませんでした。jQuery では、リモート ソースから "json" と "script" をプルすることしかできません。

代わりに私がやったのは、自分のサーバーにある外部呼び出しを行うための PHP スクリプトを作成することでした。jQuery AJAX を使用してこれを呼び出し、要求されたソースを URL に渡し、それを「テキスト」として取得します。次に、独自のチェックを実行して、適切にフォーマットされた JSON であることを確認し、別のライブラリで解析します。現時点では、jQuery には JSON を解析する機能がありません。$.getJSON は、URL を渡した場合にのみ機能します。

于 2009-07-07T17:02:04.997 に答える
0

ダイオードの答えに加えて、不快感を与える可能性のあるJSONをこのツールに貼り付けます:http://jsonformatter.curiousconcept.com/

ファイヤーバグがある場合は、プログラムでサイトのサービスを使用する方法を一緒にハックすることさえできるかもしれませんが、それは眉をひそめるかもしれません。

于 2009-06-23T04:00:26.493 に答える
0

URL または XHR リクエストをブラウザのアドレス バーで直接呼び出し、ソースを表示して結果を JavaScript を理解する IDE に貼り付けます。おそらく、見当違いの引用符か何かを見つけるでしょう。

少なくとも、問題のある構文が見つかるまで、そのチャンクを削除することができます。

于 2009-06-23T03:20:59.233 に答える