使用AJAX传递已单击元素的ID时出错
Error passing clicked element's ID with AJAX
我试图将单击div的ID传递给特定函数,我遇到了一个奇怪的结果。当错误状态(Error State)被触发(ajax-loader.gif)时,ID将成功地传递给函数,并将其自身填充到启动该循环的DIV中。
但是,我不明白为什么AJAX返回一个未完成的就绪状态。如果我用ID的硬编码名称替换'clicked_id',它就能正常工作。然而,它证明了ID名称是正确的,因为错误事件是在提供的ID的innerHTML中填充的。
我难住了。什么好主意吗?我肯定这是个新手犯的错误,但我看不出来。
我已经在我的脚本中启动了一个新的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"/>';
}
}
myReq.onreadystatechange
需要分配一个函数引用。你不能将执行函数的结果赋值给它,这就是你在这一行所做的:
myReq.onreadystatechange = theHTTPResponse(clicked_id);
这是立即执行theHTTPResponse(clicked_id)
并将结果(未定义)赋值给myReq.onreadystatechange
。因此,最终没有onreadystatechange
的回调。
把上面的行改成:
myReq.onreadystatechange = function() {theHTTPResponse(clicked_id)};
这样,你就给onreadystatechange
分配了一个实际的函数,这个函数将在状态改变时被调用,而不是立即调用。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- difference between '$(<%= DDL.ID %>) & $('
- javascript中的数组出错
- 使用Javascript获取所选选项ID
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 根据id将json数组组合为一个json数组
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 对id以某个字符串开头的元素进行计数
- 如果元素's的ID以数字开头
- 通过id和class属性获取元素
- Chrome扩展插件:runtime.last运行tabs.get/tabs.remove时出错:没有id为0的选项卡
- 解析 /page.xhtml 时出错:跟踪错误[行: 42] 与元素类型“id”关联的属性“{1}”应使用左引号
- IE11 中的 getElementById(id).remove() 出错
- 条纹付款:由于客户cus_*****没有ID为tok_*****的关联卡而出错
- jQuery中显示id未定义时出错
- 当表单元素包含带有一些特殊符号的id时,jQuery验证器会出错'无法识别的表达式'
- JSON解析Javascript丢失id字段时出错
- Chrome扩展错误:“;未选中runtime.last运行browserAction.setIcon时出错:没有id为
- 使用AJAX传递已单击元素的ID时出错
- 在 Angular js 中按 Id 降序对记录进行排序时出错,并带有 orderby 子句