jQuery getScript的IE行为不一致

时间:2012-06-22 15:16:56

标签: jquery ajax internet-explorer getscript

IE9中的一些ajax问题,使用jQuery。我目前从一个JavaScript文件中调用jQuery的getScript(),该文件加载了<script>的页面。这会将一些JSONP数据加载到window对象,然后执行一个函数来将其成员解析为<option>中的<select>。 (这在Chrome和Firefox中都可以正常使用。)

在IE9中,无论如何getScript根本不回调(甚至可以证明被调用),使页面处于半载状态。还有一个函数可以调用三个相关的getScript()来调用piGetScripts(),我试图通过用户点击一段时间后调用它,但单击元素不会叫它(但会调用它里面的任何alert()。)

奇怪,如果我打开IE JavaScript控制台然后再次单击该元素,则调用成功。从那时起,在后续页面加载( Ctrl + R )上,直到浏览器关闭,页面正确加载(与Chrome和Firefox一样)。如果在控制台打开的情况下加载页面,则调用也会正确进行。

有没有人遇到过这个?

我很想发现这种模糊行为的原因。

1 个答案:

答案 0 :(得分:2)

根据我自己的评论:

  

我已经看过这种行为,虽然它与jQuery无关。   当您从JavaScript调用控制台时,它会抛出异常   除非你打开开发者工具,它初始化控制台对象和   它后来工作。情况可能就是这样。如果你不使用   控制台,然后我不知道发生了什么(虽然你可能会给我们   更多细节:实际代码+ jQuery版本)。祝你好运!

事实上似乎确实如此。好。我想给你一些关于debuging的更多建议。您可以(并且应该)创建自己的类来处理debuging。例如,这可以是一个选项:

function Debuger() {
    var self = this;
    self.cache = [];

    self.dump = function() {
        if (window.console && window.console.log) {
            var l = self.cache.length;
            for (var i = 0; i < l; i++)
                window.console.log.apply(window.console, self.cache[i]);
            self.cache = [];
            /* We have console, we can deactivate monitor... */
            self.deactivate();
            /* ...and even redefine log! */
            self.log = function() {
                window.console.log.apply(window.console, arguments);
            };
        }
    };

    self.log = function() {
        var args = arguments;
        self.cache.push(args);
        self.dump();
    };

    self.monitor_fn = function() {
        self.dump();
    };

    self.activate = function() {
        self.monitor = setInterval(self.monitor_fn, 1000);
    };

    self.deactivate = function() {
        clearInterval(self.monitor);
        self.monitor = null;
    };
}

只需像这样使用它:

debuger = new Debuger();
debuger.activate();
debuger.log('Test');

它应该在任何浏览器下工作(尽管没有测试),如果创建了console对象,那么它会将缓存的消息转储给它。显然你应该根据自己的需要进行定制。