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