我正在尝试将单击的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"/>';
}
}
答案 0 :(得分:1)
myReq.onreadystatechange
分配一个函数引用。你无法为它分配执行函数的结果,而这正是你用这一行所做的:
myReq.onreadystatechange = theHTTPResponse(clicked_id);
这会立即执行theHTTPResponse(clicked_id)
并将结果(未定义)分配给myReq.onreadystatechange
。因此,您最终没有回复onreadystatechange
。
将以上行更改为:
myReq.onreadystatechange = function() {theHTTPResponse(clicked_id)};
这样,您将实际函数分配给onreadystatechange
,当状态发生变化而不是立即调用时,将调用此函数。