私は動的スクリプトタグでjson要求の束をします。要求にエラーがあるかどうかを検出できますか(たとえば503エラー、404エラー)、エラーの検出時に何かを実行しますか?JSONリクエストの動的スクリプトタグ... XXXエラーがあるかどうかを検出していますか?
答えて
代わりにajaxを使用します。 AFAIKは、スクリプトタグがロードされているかどうかを検出する方法がなく、そうでなければロードしなかった理由を検出できません。 ajaxを使用するとjsonを読み込むことができ、読み込まれなかった理由がわかります。
$.ajax({
type: "GET",
url: "test.js",
dataType: "script",
error: function(xhr, error, exception){
alert(xhr.status); //Will alert 404 if the script does not exist
}
});
しかし... ...方法があります。 –
AFAIKでは、ドキュメントから読み込まれた外部アセット(スクリプト、スタイル、画像など)のステータスコードにアクセスすることはできません。エラーの検出(例:onerror
イベントハンドラ経由)は、ブラウザ間で広くサポートされているわけではありません。
ロードするものがSOPの場合は、XHRを使用して応答ヘッダーにアクセスします。それ以外の場合は、最近紹介されたX-domain XHRをご覧ください。
http://www.phpied.com/javascript-include-ready-onload/:
これは非常に簡単になるのjQueryのようなライブラリを使用していますか?
これは解決策のようです。それを説明するテキストを追加したり、参照ページのサンプルコードを回答に含めたりする場合は、いくつかのアップフォートを取得し、受け入れられた回答で報酬を得ることができます。 –
リンクはそれをかなり説明し、コピー/ペーストを増やすエントロピーLOLで空間を汚染したくありません。 – Kane
私はこのリンクが適切であるとは思わない。リンクされた記事は、エラー検出ではなく、正常なロードを検出することに関するものです。 –
エラーを検出する場合は、error
イベントをリッスンし、エラーのfileName
プロパティをスクリプトのファイル名と比較します。一致した場合は、エラーを処理します。事は、私はfileName
プロパティがFirefoxとOperaのみであると思います。エラーのスタックトレースを持つほとんどのブラウザでも、この動作をシミュレートできます。エリックBréchemierによって要求されるように
はここでは、例です:私はあなたがこれはあなたがXHRを使用することができない理由であるクロスドメインを、仕事をしたいと仮定してい
var getErrorScriptNode = (function() {
var getErrorSource = function (error) {
var loc, replacer = function (stack, matchedLoc) {
loc = matchedLoc;
};
if ("fileName" in error) {
loc = error.fileName;
} else if ("stacktrace" in error) { // Opera
error.stacktrace.replace(/Line \d+ of .+ script (.*)/gm, replacer);
} else if ("stack" in error) { // WebKit
error.stack.replace(/at (.*)/gm, replacer);
loc = loc.replace(/:\d+:\d+$/, "");
}
return loc;
},
anchor = document.createElement("a");
return function (error) {
anchor.href = getErrorSource(error);
var src = anchor.href,
scripts = document.getElementsByTagName("script");
anchor.removeAttribute("href");
for (var i = 0, l = scripts.length; i < l; i++) {
anchor.href = scripts.item(i).src;
if (anchor.href === src) {
anchor.removeAttribute("href");
return scripts.item(i);
}
}
};
}());
どうすればいいですか?どのような例ですか? –
Eric:例を追加しました。 –
?
リクエストごとに2つのスクリプトタグを作成してください。最初は標準のJSONPリクエスト、2つ目はエラーハンドラです。
最初のスクリプトタグが実行される場合は、コールバックでエラーハンドラをクリアします。しかし、最初に404を取得すると、2番目のスクリプトタグ内のエラーハンドラが実行されます。
遅いJSONP応答に対処するために、タイムアウトを設定したいと思うかもしれません。
ドメイン間を移動する必要があり(ページを移植可能にする必要がある場合)、動的スクリプトタグを使用する必要があります。
リモートサーバへのアクセスを持っている場合は、あなたが戻ってサーバーからのエラーコードを渡し、サーバーページリターンを持つことができる200
作成したときに、アクセス権を持っているかどうかは、あなたがのsetTimeoutを使用することができますスクリプトタグは、jsonpハンドラが呼び出される前に期限が切れた場合にエラーをトリガする関数を渡します。エラーハンドラが呼び出された場合は、jsonpハンドラが異常終了していることを確認してください。
グローバルコレクションを通じて各リクエストを追跡する必要がありますが、リクエストをキャンセルしてカウントすることができます。これは、XHRオブジェクトがjQueryのようなライブラリによって管理される方法と似ています。
jQueryを使用している場合は、<script>
の挿入とフェッチエラーの検出をかなりうまくやっているjQueryプラグインであるjQuery-JSONPをチェックしてください。ネットワーク障害や病気に形成されたJSONレスポンスの場合は
- エラー回復、コールバック命名オーバー
- 正確に制御する方法と、それがに送信されます。プロジェクトのページから引用
、jQueryの-JSONPが特徴URL、同時に実行同じコールバック名で
- 複数の要求、
- 2つのキャッシング・メカニズム(ブラウザベースとページベース)、
- ABO手動の可能性他のAJAXリクエストと同様にリクエストを送信します。
- タイムアウトのメカニズム。
しかし、失敗したリクエストの実際のステータスコードを知る方法はありません。 – kangax
- 1. Grails - リクエストがHTTPまたはHTTPSであるかどうかを検出する
- 2. CountdownTimerが動作しているかどうかを検出します
- 3. リクエスト変数のリストが空であるかどうかを検出するPHP
- 4. 404エラーが追加されたスクリプトタグから検出される
- 5. 現在のページがGETリクエストまたはPOSTリクエストの結果であるかどうかを検出するブックマークレット
- 6. Android UiAutomator - アプリが自動ボタンモードであるかどうかを検出します
- 7. JSONエラーを検出できますか
- 8. C#でハードウェアデバイスが動作しているかどうかを検出する
- 9. C#:スクリーンリーダーが動作しているかどうかを検出するには?
- 10. メディアプレーヤーが動作しているかどうかを検出する方法
- 11. ツールチップが表示されているかどうかを検出しますか?
- 12. socket.io/node.jsサーバーがダウンしているかどうかを検出
- 13. 要素がブートストラップモーダルのビューにあるかどうかを検出しますか?
- 14. テキストコンテンツにCDATAが含まれているかどうかを検出します
- 15. ポインタが配列を指しているかどうかを検出する方法はありますか?
- 16. ソートアルゴリズムが安定しているかどうかを検出するブラックボックス方式はありますか?
- 17. スピーカーが接続されているかどうかを検出しますか?
- 18. RichTextBoxが空であるかどうかを検出する
- 19. ディスクがフラッシュドライブであるかどうかを検出する
- 20. スレッドがイベントを待っているかどうかを検出します。
- 21. Javascriptは、テキストボックスにフォーカスがあるかどうかを検出しますか?
- 22. ユーザーに印刷機能があるかどうかを検出しますか?
- 23. UIScrollViewがスクロールしているかどうかを検出します。
- 24. ユーザがFacebookからログアウトしているかどうかを検出する
- 25. Chromeの豊富な通知があるかどうかを検出します。
- 26. デバイスがiPhoneであるかどうかを検出する533
- 27. Androidアプリがダウンロードされているかどうかを検出します。
- 28. Django:チェックボックスがサブミットされているかどうかを検出します
- 29. このJSONリクエストをPHPの新しいJSON出力にどのように変換しますか?
- 30. フュージョンテーブルが現在行をインポートしているかどうかを検出する
どのようにこれらのJSONリクエストを行っていますか? –
私はdocument.createElement( 'script')を使用して、要素のsrcを目的のURLに変更し、要素をDOMに追加しています。私はtry/catchブロックにappendChildを置こうとしましたが、何もしません。 – rawrrrrrrrr
質問をコードスニペットで更新したり、http://jsbin.com/に投稿したりすることができますか?完全性のために役立ちますか? –