IE9中的一些ajax问题,使用jQuery。我目前从一个JavaScript文件中调用jQuery的getScript()
,该文件加载了<script>
的页面。这会将一些JSONP数据加载到window
对象,然后执行一个函数来将其成员解析为<option>
中的<select>
。 (这在Chrome和Firefox中都可以正常使用。)
在IE9中,无论如何,getScript
根本不回调(甚至可以证明被调用),使页面处于半载状态。还有一个函数可以调用三个相关的getScript()
来调用piGetScripts()
,我试图通过用户点击一段时间后调用它,但单击元素不会叫它(但会调用它里面的任何alert()
。)
奇怪,如果我打开IE JavaScript控制台然后再次单击该元素,则调用成功。从那时起,在后续页面加载( Ctrl + R )上,直到浏览器关闭,页面正确加载(与Chrome和Firefox一样)。如果在控制台打开的情况下加载页面,则调用也会正确进行。
有没有人遇到过这个?
我很想发现这种模糊行为的原因。
答案 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
对象,那么它会将缓存的消息转储给它。显然你应该根据自己的需要进行定制。