Javascript 传递单击的元素时出错';s ID与AJAX

Javascript 传递单击的元素时出错';s ID与AJAX,javascript,ajax,Javascript,Ajax,我试图将单击的DIV的ID传递给一个特定的函数,但我遇到了一个奇怪的结果。当错误状态被触发(ajax loader.gif)时,该ID成功地将其发送到函数,并在启动onclic的DIV中填充它自己 但是,我不明白为什么AJAX会返回未完成就绪状态。如果我将“clicked_id”替换为该id的硬编码名称,它将正常工作。但是,事实证明,ID名称正确地用于函数,因为错误事件正在提供的ID的innerHTML中填充 我被难住了。有什么想法吗?我肯定这是个错误,但我看不出来 我在我的脚本中启动了一个新的

我试图将单击的DIV的ID传递给一个特定的函数,但我遇到了一个奇怪的结果。当错误状态被触发(ajax loader.gif)时,该ID成功地将其发送到函数,并在启动onclic的DIV中填充它自己

但是,我不明白为什么AJAX会返回未完成就绪状态。如果我将“clicked_id”替换为该id的硬编码名称,它将正常工作。但是,事实证明,ID名称正确地用于函数,因为错误事件正在提供的ID的innerHTML中填充

我被难住了。有什么想法吗?我肯定这是个错误,但我看不出来

我在我的脚本中启动了一个新的XMLHTTPRequest,为了简洁起见,我把它省略了。我知道可能有更简单的方法可以做到这一点,比如jQuery的click事件,但为了我自己,我想知道为什么会出现这种情况

<div class='colour'><img src='media/recipe_save.jpg' id='showtime' onclick='javascript:getServerTime(this.id);'></div>

function getServerTime(clicked_id) {
  var thePage = 'ajax.recipesave.php';
  myRand = parseInt(Math.random()*999999999999999);
  var theURL = thePage +"?rand="+myRand;
  myReq.open("GET", theURL, true);
  myReq.onreadystatechange = theHTTPResponse(clicked_id);
  myReq.send(null);
}

function theHTTPResponse(clicked_id) {
  alert(clicked_id);
  if (myReq.readyState == 4) {
    if(myReq.status == 200) {
       var timeString = myReq.responseXML.getElementsByTagName("timestring")[0];
       document.getElementById(clicked_id).innerHTML = timeString.childNodes[0].nodeValue;
    }
  } else {
    document.getElementById(clicked_id).innerHTML = '<img src="media/ajax-loader.gif"/>';
  }
}

函数getServerTime(单击\u id){
var thePage='ajax.recipesave.php';
myRand=parseInt(Math.random()*999999999);
var theURL=page+“?rand=“+myRand;
myReq.open(“GET”,URL,true);
myReq.onreadystatechange=httpresponse(单击\u id);
myReq.send(空);
}
函数httpresponse(单击\u id){
警报(单击了\u id);
如果(myReq.readyState==4){
如果(myReq.status==200){
var timeString=myReq.responseXML.getElementsByTagName(“timeString”)[0];
document.getElementById(已单击)。innerHTML=timeString.childNodes[0]。nodeValue;
}
}否则{
document.getElementById(单击了)。innerHTML='';
}
}

myReq.onreadystatechange
需要分配一个函数引用。您不能将执行函数的结果分配给它,这就是您对此行所做的:

myReq.onreadystatechange = theHTTPResponse(clicked_id);
这将立即执行HttpResponse(单击\u id),并将结果(未定义)分配给myReq.onreadystatechange。因此,
onreadystatechange
没有回调

将上述行更改为:

myReq.onreadystatechange = function() {theHTTPResponse(clicked_id)};

这样,您将实际的函数分配给
onreadystatechange
,并且当状态更改时将调用此函数,而不是立即调用。

!我知道这是一些基本的东西。非常感谢您描述jfriend00背后的原因,非常感谢。