我正在加载一个使用回调函数的外部脚本,它返回一些特定的数据。如果未收到此数据,则应显示错误。
这是我制作的代码:
<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事件。如果您将脚本的主机名或域更改为不存在的内容,则此错误事件实际上会触发。
但是,如果您只更改脚本的 url,它仍然可以连接到服务器并触发onload事件。我的回调函数不会被那些无效请求调用,所以我也添加了一个onload处理程序。
现在的问题是,如果所有加载正常并返回数据,它将触发回调函数和onload。我注意到在onload之前触发了回调函数并设置了visitor_loaded变量,以便只调用一次处理函数。
到目前为止,它在 JS fiddle 和我的离线站点中运行良好,但我想知道这是否是预期的行为?json_callback函数是否总是优先于onload处理程序?