我正在编写一个ColdFusion应用程序,一旦点击相应的按钮就会填充一些HTML内容。
readyState永远不会从初始状态1上升。 让我发疯的事实是我在其他模块中使用了相同的AJAX代码。
我尝试在我的小程序“___ AJAX_load_translator.cfm”中手动编写代码以查看是否正常工作(输入带参数和查询字符串的完整网址)并且它可以正常工作。
我在这些javascript函数中添加了许多警报,以跟踪是否正确创建了网址,参数格式是否正确等等。一切似乎都很好。这真让我抓狂。 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函数中发出警报,它会显示一个突然的readystate 1.然后浏览器状态栏显示等待调用服务器的状态,它会立即消失。看来呼叫真的是在那个时刻完成的,可能它就是imho。
但在我看来,在呼叫准备就绪(状态1)之后,没有更多的进展。它似乎被某种方式阻止了。或者,函数setOutput被停用。也许第四次更改为4状态并且此状态未被回调注册?在这种情况下,为什么不使用新内容更新DIV?
感谢您的帮助。
答案 0 :(得分:3)
httpObject.onreadystatechange = setOutput(divID);
^^^^^^^
您正在那里调用/执行setouput
函数,无论函数返回什么,都会在onreadystatechange
回调&#34;指针&#34;。
删除(divID)
部分,因此您可以自行分配函数,而不是它返回的内容:
httpObject.onreadystatechange = setOutput;