特定のデータを返すコールバック関数を使用する外部スクリプトを読み込んでいます。このデータが受信されない場合、エラーが表示されます。
ここに私が作ったコードがあります:
<script>
//setting initial state so that function will only work once
var visitors_loaded=false;
var my_callback = function( data ) {
if (visitors_loaded) return 0;
if (data) {
//success: callback function is called and it has a proper data
visitors_loaded=true;
alert(JSON.stringify(data));
}
else alert ('error'); //something went wrong
};
</script>
<script onload="my_callback(null)" onerror="my_callback(null)"
src="https://api.clicky.com/api/stats/4?site_id=32020&sitekey=9a19b1a4d1171193&type=visitors&date=this-month&output=json&json_callback=my_callback"></script>
ご覧のとおり...スクリプトには多くの問題が発生する可能性があるため、当然のことながらonerrorイベントを追加しました。この on error イベントは、スクリプトのホスト名またはドメインを存在しないものに変更すると、実際に発生します。
ただし、スクリプトの URL のみを変更した場合でも、サーバーに接続して、代わりにonloadイベントを発生させることができます。これらの無効なリクエストに対してコールバック関数が呼び出されないため、onloadハンドラも追加しました。
問題は、すべてが正常にロードされ、データが返された場合、コールバック関数とonloadの両方が起動することです。onloadの前にコールバック関数がトリガーされ、 visitors_loaded変数を設定して、ハンドラー関数が 1 回だけ呼び出されるようにしました。
これまでのところ、JS fiddle と私のオフライン サイトでは完全に動作しますが、これは予想される動作なのだろうか? そのjson_callback関数は常にonloadハンドラの前に優先されますか?