我正在编写一个 ColdFusion 应用程序,一旦单击相应的按钮,它就会填充一些 HTML 内容和一些 div。
发生的情况是,readyState 永远不会从初始状态 1 上升。 让我抓狂的事实是,我在其他工作正常的模块中使用了相同的 AJAX 代码。
我手动尝试了小程序“___AJAX_load_translator.cfm”中的代码,看看是否可以正常工作(输入带有参数和查询字符串的完整网址)并且它可以工作。
我在这些 javascript 函数中放置了许多警报,以跟踪 url 创建是否正确、参数格式是否正确等等。一切看起来都很好。这真让我抓狂。在 FireFox 和 IE 上结果相同。
function getHTTPObject(){
if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
else
if (window.XMLHttpRequest) return new XMLHttpRequest();
else {
alert("No AJAX support.");
return null;
}
}
function setOutput(divID){
if(httpObject.readyState == 4 && httpObject.status == 200){
document.getElementById(divID).innerHTML = httpObject.responseText;
} // else alert(httpObject.readyState + ' ' + httpObject.status);
}
function loadeditor(divID,CP,PP){
<CFOUTPUT>var CF_TOKENS = "CFID=#CFID#&CFTOKEN=#CFTOKEN#";</CFOUTPUT>
var operativeurl= "___AJAX_load_translator.cfm?"+CF_TOKENS+"&CP="+CP+"&PP="+PP;
httpObject = getHTTPObject();
if (httpObject != null) {
httpObject.open("POST", operativeurl, true);
httpObject.onreadystatechange = setOutput(divID);
httpObject.send(null);
}
}
我注意到,将警报放入 setOutput 函数中时,它会突然显示就绪状态 1。然后浏览器状态栏显示等待对服务器的调用的状态,该状态立即消失。看来通话真的在那一刻完成了,可能是恕我直言。
但在我看来,在调用准备就绪(状态 1)之后就不再进行了。似乎被某种方式阻止了。或者,setOutput 函数被停用。也许状态 4 发生了第二次更改,并且回调未注册该状态?在这种情况下,为什么 DIV 没有更新为新内容?
感谢您的帮助。
最佳答案
httpObject.onreadystatechange = setOutput(divID);
^^^^^^^
您正在此时调用/执行您的 setouput
函数,无论该函数返回什么,都会成为 onreadystatechange
回调“指针”。
删除 (divID)
部分,以便您分配函数本身,而不是它返回的任何内容:
httpObject.onreadystatechange = setOutput;
关于javascript - 使用通用参数的 AJAX 调用始终提供 readState = 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660402/