0

我在以下代码中遇到问题:

//quesry the db for image information
function queryDB (parameters) {
     var parameters = "p="+parameters;
     alert ("hello");


if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        // use the info
  alert (xmlhttp.responseText);
    }
  } 

    xmlhttp.open("POST", "js/imagelist.php", true);
    //Send the proper header information along with the request
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", parameters.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(parameters);
}

这是从此函数调用:

function buildGallery() {

    var images = document.getElementsByTagName("img");
    for (var i = 0; i< images.length; i++) {
        if (images[i].getAttribute("id").split("_")[0] == "onshow") {

            var parameters = images[i].getAttribute("id").split("_")[1];

            queryDB (parameters);
        }
    }

}

当我在 queryDB 函数中删除警报语句 4 行时,我遇到了问题。这个函数被一个循环调用,没有警报,我只得到发送给这个函数的最后一个值的结果。有了它,我得到了我所期待的一切,我真的不知道为什么。

我听说这可能是时间问题,因为我在旧请求完成之前发送新请求。我也听说有人提到了民意调查,但我找不到任何足够详细的信息。

我是同步服务的新手,我并没有真正意识到这些问题。

4

1 回答 1

1

实际上,问题在于您使用的是全局变量。添加:

var xmlhttp;

到 queryDB 的开头

正如 TriLLi 所指出的,警报通过在覆盖之前给之前的调用时间来完成来隐藏这个问题。

于 2010-05-23T20:31:12.763 回答