为动态加载的javascript文件实现“错误”回调
Implement 'error' callback for Dynamically loaded javascript file
我正在动态加载javascript并访问其变量。我检查了这个问题的第二个答案,下面的代码运行良好。
include = function (url, fn) {
var e = document.createElement("script");
e.onload = fn;
e.src = url;
e.async=true;
document.getElementsByTagName("head")[0].appendChild(e);
};
include("test.js",function(){
console.log(foo);
});
问题:我还想有一个onFailure
回调函数,允许我处理代码以防万一
- 互联网关闭了。
- 文件名不可访问(例如:路径不正确(
如果有人能引导我走向正确的方向,将不胜感激。谢谢
HTMLScriptElement 的 MDN 页面有一个很好的例子,你可以用它来构建。
function loadError (oError) {
throw new URIError("The script " + oError.target.src + " is not accessible.");
}
function importScript (sSrc, fOnload) {
var oScript = document.createElement("script");
oScript.type = "text'/javascript";
oScript.onerror = loadError;
if (fOnload) { oScript.onload = fOnload; }
document.currentScript.parentNode.insertBefore(oScript, document.currentScript);
oScript.src = sSrc;
}
我认为最简单的解决方案是实际使用XMLHttpRequest。这使您可以在请求完成后访问请求的状态,而"load"事件则不会。为了简单起见,我将用jQuery进行说明,但这也可以用vanilla javascript编写。
$.ajax({
url:"myfile.js",
method:"GET",
dataType:"html",
success: function(data, status, jqxhr) {
console.log("It worked");
// This can be very dangerous. Make sure you trust script source.
var newScript = $("<script>").html(data);
$('body').append(newScript);
},
error: function(jqxhr, status, error) {
console.log("Oh no!");
}
});
更多关于jQuery ajax请求的信息,请点击此处。
相关文章:
- 测试Angular Service解决错误回调中的promise
- $http服务未触发成功或错误回调
- jQuery AJAX错误回调未运行
- JavaScriptajax请求servlet调用错误回调函数
- 为什么 AJAX 完成和错误回调都触发了
- Cordova Android短信插件不会触发成功或错误回调
- 无法识别错误回调
- 在第一次错误回调时退出承诺链
- 如何获取 Ember 组件对象内部承诺成功或错误回调
- 在 Node.js 中传播错误回调,并避免所有额外的麻烦
- 在 HTTP 错误回调中访问“this”
- 在 AngularJS 中声明一个承诺,并带有命名的成功/错误回调
- 谷歌浏览器中的地理位置错误回调
- PhoneGap 3.0.0 Tanelih 蓝牙插件在 Android 上已启用错误回调不起作用
- $http错误回调不能与 httpProvider responseInterceptor 结合使用
- JayData 上的默认错误回调
- 错误回调中的错误:TestPlugin2 = 引用错误:找不到变量:在 file:///android_asset/ww
- 主干.js:保存方法始终返回错误回调
- AJAX 中的成功或错误回调不起作用
- Backbone.js:奇怪的.save()错误回调