不一致的IE行为jQuery getScript



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

然而,在IE9中getScript根本没有回调(甚至明显被调用(,使页面处于半加载状态。还有一个函数调用三个相关的getScript(),称为piGetScripts(),我试图在一定时间后通过用户单击来调用它,但单击元素不会调用它(但会调用其中的任何alert()(。

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

以前有人遇到过这种情况吗?

我很想找出这种晦涩难懂的行为的原因。

下面是我自己的评论:

我已经看到了这种行为,尽管它与jQuery无关。当您从JavaScript调用控制台时,它会抛出一个异常除非打开Developer Tools,它初始化控制台对象并之后它就起作用了。可能是这样。如果您不使用控制台,那么我不知道发生了什么(尽管你可以给我们更多细节:实际代码+jQuery版本(。祝你好运

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

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对象,它就会向它转储缓存的消息。显然,你应该根据自己的需要对它进行自定义。

最新更新