我在以下代码中遇到问题:
//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行时,我遇到了问题。这个函数是由循环调用的,没有警报,我只得到发送给这个函数的最后一个值的结果。有了它,我得到了我所期待的一切,我真的很想知道为什么。
我听说这可能是一个时间问题,因为我在旧请求完成之前发送新请求。我也听说过民意调查,但我找不到足够详细的信息。
我是同步服务的新手,我并不是真的意识到这些问题。
答案 0 :(得分:1)
实际上,问题在于你正在使用全局变量。添加:
var xmlhttp;
到queryDB的开头
正如TriLLi所说,警报通过在覆盖之前提前完成通话时间来隐藏此问题。