我有一个最奇怪的错误,我的Javascript函数的行为会有所不同,具体取决于是否在特定Line上设置了警报。
基本上,代码如下所示:
var friendsHtml = 'Error String';
$.get("url", function(xml){
$(xml).find('friend').each(function(){
friendsHtml = 'html stuff';
});
});
var div = '<div>'+friendsHtml+'</div>';
$("#friends_window").html(div);
它将始终显示错误字符串而不是HTML字符串。
但是,当我在这一行上添加一个空警报时,一切正常:
var friendsHtml = 'Error String';
$.get("url", function(xml){
$(xml).find('friend').each(function(){
friendsHtml = 'html stuff';
});
});
alert("");
var div = '<div>'+friendsHtml+'</div>';
$("#friends_window").html(div);
我真的不明白。
最佳答案
alert
阻止(“暂停”)功能的执行,但不阻止AJAX请求。
因此,当您单击“确定”以关闭警报对话框时,请求可能已完成,然后friendsHtml
变量由jQuery.get
中的回调方法更改。
可视化:
// Case 1
var friendsHtml = 'Error String';
< sending AJAX request... >
var div = '<div>'+friendsHtml+'</div>'; // <AJAX request hasn't finished yet
// so "Error String" is printed.
// Case 2:
...
< sending AJAX request >
alert(""); // <-- Blocks execution
// Meanwhile, AJAX request finishes
// and changes friendsHtml to "html stuff"
< User dismisses dialog, and the execution is resumed >
var div = '<div>'+friendsHtml+'</div>'; // <-- "html stuff"
关于javascript - 空警报更改功能行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9558840/