Javascript AJAX奇怪的行为

时间:2015-05-28 15:27:11

标签: javascript ajax asynchronous

我有这样的事情:

elFinder.prototype.commands.info = function()
{
    this.exec = function(hashes)
    {
        var temp_array = new Array(),
            temp_html = new String();
        var request = new XMLHttpRequest();

        request.onload = function()
        {
            temp_html = "<a href='foo'>bar</a>";
            temp_array.push(temp_html);
            alert("Outside - Array size is " + temp_array.length); 
        }
        request.open("get", "foo.com/url", true);
        request.send();
        alert("Outside - Array size is " + temp_array.length); 
    }
}

分别打印:

  

内部 - 数组大小为1

  

外部 - 数组大小为0

以某种方式“丢失”数组内容。

1 个答案:

答案 0 :(得分:1)

问题出在AJAX概念本身。特别是,true进入

request.open("get", "foo.com/url", true);

意味着应该以异步方式处理请求(顺便说一句,建议的模式进入主线程环境,因为像Chrome这样的浏览器不赞成他们通常携带的巨大延迟的同步请求)。

洞察力由alert()系列中的不同订单提供,首先在Firefox中测试代码段,然后在Chrome中测试。

在我的上下文中我严格需要一个同步行为,所以我切换到false布尔标志。