使用AJAX传递单击元素的ID时出错

时间:2011-12-17 05:10:54

标签: javascript ajax

我正在尝试将单击的DIV的ID传递给特定的函数,但我遇到了奇怪的结果。 ID成功启动了函数,因为触发了错误状态(ajax-loader.gif),并在DIV中填充了onclic的启动。

但是,我不明白为什么AJAX会返回一个未完成的Ready-State。如果我用ID的硬编码名称替换'clicked_id',它可以正常工作。然而,事实证明,ID名称正确地使其成为函数,因为Error事件正在提供的ID的innerHTML中填充。

我很难过。有任何想法吗?我确定这是一个noob错误,但我无法发现它。

我在我的脚本中启动了一个新的XMLHTTPRequest,为了简洁,我把它留了下来。而且我知道可能更容易做到这一点,比如jQuery的点击事件,但为了我自己的缘故,我想知道为什么会这样做。

<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"/>';
  }
}

1 个答案:

答案 0 :(得分:1)

需要为

myReq.onreadystatechange分配一个函数引用。你无法为它分配执行函数的结果,而这正是你用这一行所做的:

myReq.onreadystatechange = theHTTPResponse(clicked_id);

这会立即执行theHTTPResponse(clicked_id)并将结果(未定义)分配给myReq.onreadystatechange。因此,您最终没有回复onreadystatechange

将以上行更改为:

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

这样,您将实际函数分配给onreadystatechange,当状态发生变化而不是立即调用时,将调用此函数。