2

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

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

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

有没有人遇到过这个?

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

4

1 回答 1

2

按照我自己的评论:

我已经看到了这种行为,尽管它与 jQuery 无关。当您从 JavaScript 调用控制台时,它会引发异常,除非您打开开发者工具,该工具会初始化控制台对象并在之后工作。可能是这样。如果您没有使用控制台,那么我不知道发生了什么(尽管您可能会向我们提供更多细节:实际代码 + 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创建了对象,那么它会将缓存的消息转储到它。显然,您应该根据自己的需要对其进行自定义。

于 2012-06-22T17:23:48.837 回答