Ajax调用没有响应重复请求

时间:2009-03-16 16:22:34

标签: javascript ajax

我有一个带下拉列表的页面。 onchange事件调用Javascript函数(下面),其中包含一个Ajax块,用于检索数据并填充TEXTAREA。从表面上看,一切正常。

我可以选择列表中的任何项目,没有任何问题。但是,如果我选择之前已选择的项目,则Ajax调用似乎挂起。看起来可能是一些奇怪的缓存问题。如果我关闭浏览器并重新加载页面,则所有项目都会再次运行,直到我重新选择。

我已经测试了readyStatestatus属性,但是我什么也没得到。我错过了什么吗?

该页面是身份验证背后的客户端项目,因此我无法发布URL,但这里是Ajax代码。这是在PHP页面中,但没有与此相关的PHP脚本。

function getText( id ) {
var txt = document.getElementById( "MyText" );

txt.disabled = "disabled";
txt.innerText = "";
txt.className = "busy";

var oRequest = zXmlHttp.createRequest();
oRequest.open( "get", "get_text.php?id=" + id, true );
oRequest.send( null );

oRequest.onreadystatechange = function() {
    if( oRequest.readyState == 4 ) {
        if( oRequest.status == 200 ) {
            txt.innerText = oRequest.responseText;
        } else {
            txt.innerText = oRequest.status + ": " + oRequest.statusText;   
        }

        txt.disabled = "";
        txt.className = "";

        oRequest = null;
    }
}}

编辑:代码块看起来有点古怪;它不会让我包括最后的},除非它与前一行在同一行。

3 个答案:

答案 0 :(得分:1)

您在发送请求后设置了onreadystatechange功能。如果它需要很长时间(即如果它进入服务器),这可能会起作用,因为在尝试调用回调之前会有一段延迟。

如果页面已缓存,则浏览器可能会尝试立即在onreadystatechange方法中调用send。将您的作业移至onreadystatechange代码前的open/send

答案 1 :(得分:1)

HI, 缓存是由于重复调用的URL相同。如果您动态更改URl,则可以解决此问题。通过添加带有请求的当前时间的查询字符串(或任何随机的renerated数字),您可以更改网址而不影响结果

答案 2 :(得分:0)

我猜你正在遇到一个缓存问题。我注意到Internet Explorer在缓存ajax调用方面比Firefox更具攻击性。确保发生的事情的一种方法是使用Fiddler2。此应用程序监视您的Web流量,您将能够看到浏览器是否发出请求,以及您收到的响应中返回了哪些缓存标头。

您可以从http://www.fiddlertool.com/fiddler/

下载fiddler2