使用公共参数的AJAX调用总是给出readyState = 1

时间:2015-07-27 18:18:33

标签: javascript jquery html coldfusion

我正在编写一个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?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

    httpObject.onreadystatechange = setOutput(divID);
                                             ^^^^^^^

您正在那里调用/执行setouput函数,无论函数返回什么,都会在onreadystatechange回调&#34;指针&#34;。

删除(divID)部分,因此您可以自行分配函数,而不是它返回的内容:

    httpObject.onreadystatechange = setOutput;