我有一个最奇怪的错误,我的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/

10-11 20:06
查看更多