我尝试使用jQuery动态加载JavaScript以初始化我的ajax应用程序。当脚本成功加载时,我希望得到一个处理函数。这就是我的代码:
var $script = $('<script type="text/javascript"></script>').appendTo('head');
$script.load(function() { ... });
$script.error(function() { ... });
$script.attr('src', 'foo.js');
这适用于FireFox,Opera,Safari和Chromium 在加载脚本后总是调用onload-handler 但IE(v8)既不调用onload-handler也不调用onerror-handler。所以我的ajax-application永远不会被初始化; - )
有谁知道如何解决这个问题?
最诚挚的问候, 大不了
编辑:
我想我得到了它的工作:
$.ajax({
type: "GET",
url: options.script,
data: null,
success: function(data, textStatus) {
options.onload();
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
options.onerror();
},
beforeSend: function(xhr) {
// Fix for FireFox 3 to prevent "malformed"-message
if (xhr.overrideMimeType) {
xhr.overrideMimeType("text/plain");
}
},
dataType: "script"
});
beforeSend
用于阻止FireFox中的malformed
- 错误。
这似乎适用于FireFox和IE。如果脚本不存在,两者都会调用错误处理程序。
答案 0 :(得分:3)
jQuery有getScript
jQuery.getScript( url, [ success(data, textStatus) ] )
答案 1 :(得分:0)
@ epascarello的答案可能是最便捷的方式。
除此之外:
onerror
不适用于IE中的脚本元素。请参阅this question中的详细背景信息。
onload
应该根据MSDN工作。如果它确实没有,那么解决方法可能是在嵌入式JS中执行该函数。
答案 2 :(得分:0)
error
在任何一种情况下均无法正常运行,但$.getScript()
(及$.ajax()
下方)uses onreadystatechange
as well to support IE,您可以这样做:
$.getScript("foo.js", function() { /* run your app code */ });
答案 3 :(得分:0)
差不多一年后......
我在jquery源代码中做了一点改动,以便在调用脚本时正确支持404错误。
在源代码中搜索“ jQuery.ajaxTransport(”script“,function(s){”并在函数体中(我在onload事件之前添加)添加:
[...]
// Attach error event handler
script.onerror = function(){ callback(0, "error"); };
[...]
此修改将触发“错误”回调。因此,您可以为404错误创建回退函数。
这是一个肮脏的修改,但在我测试的大多数浏览器中都能很好地工作(FF,Chrome,Webkit,IE7-9)