Javascript 传递单击的元素时出错';s ID与AJAX
我试图将单击的DIV的ID传递给一个特定的函数,但我遇到了一个奇怪的结果。当错误状态被触发(ajax loader.gif)时,该ID成功地将其发送到函数,并在启动onclic的DIV中填充它自己 但是,我不明白为什么AJAX会返回未完成就绪状态。如果我将“clicked_id”替换为该id的硬编码名称,它将正常工作。但是,事实证明,ID名称正确地用于函数,因为错误事件正在提供的ID的innerHTML中填充 我被难住了。有什么想法吗?我肯定这是个错误,但我看不出来 我在我的脚本中启动了一个新的XMLHTTPRequest,为了简洁起见,我把它省略了。我知道可能有更简单的方法可以做到这一点,比如jQuery的click事件,但为了我自己,我想知道为什么会出现这种情况Javascript 传递单击的元素时出错';s ID与AJAX,javascript,ajax,Javascript,Ajax,我试图将单击的DIV的ID传递给一个特定的函数,但我遇到了一个奇怪的结果。当错误状态被触发(ajax loader.gif)时,该ID成功地将其发送到函数,并在启动onclic的DIV中填充它自己 但是,我不明白为什么AJAX会返回未完成就绪状态。如果我将“clicked_id”替换为该id的硬编码名称,它将正常工作。但是,事实证明,ID名称正确地用于函数,因为错误事件正在提供的ID的innerHTML中填充 我被难住了。有什么想法吗?我肯定这是个错误,但我看不出来 我在我的脚本中启动了一个新的
<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背后的原因,非常感谢。