使用jQuery加载脚本 - IE失败

时间:2010-10-24 12:14:14

标签: jquery

我尝试使用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。如果脚本不存在,两者都会调用错误处理程序。

4 个答案:

答案 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)