在单个函数中重叠AJAX请求

时间:2013-02-26 15:15:52

标签: javascript ajax

如果foo快速连续调用两次,以便在收到第一个响应之前发生第二次调用,那么foo是否安全?如果它是安全的,请你解释正确的" param"值匹配正确的" xmlHttp"回应?

function foo (param)
{
    var xmlHttp = GetXmlHttpRequestObject();

    xmlHttp.onreadystatechange = function()
    {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
        {
            // do something involving param and xmlHttp.responseXML
        }
    }

    xmlHttp.open("GET", "GetAsyncData.ashx", true);
    xmlHttp.send();
}

2 个答案:

答案 0 :(得分:1)

var xmlHttp绑定到函数foo范围。每次调用该函数时,都会设置一个新的xmlHttp。对于功能参数,同样的情况发生。参数也与var xmlHttp一样绑定到函数范围。因此,在这种情况下,每次调用函数时,paramxmlHttp都是绑定到同一范围的变量,这就是为什么每个param都要进行的与正确的xmlHttp响应匹配。

有关更多信息,请阅读有关javascript闭包的信息。

答案 1 :(得分:0)

var将变量作为函数的范围。每次调用该函数都会创建一个具有该名称的新变量。