繁体   English   中英

Ajax 呼叫对重复请求没有响应

[英]Ajax call not responding on repeated request

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

我可以 select 列表中的任何项目都没有问题。 但是,如果我 select 之前已选择一个项目,则 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;
    }
}}

编辑:代码块似乎有点古怪; 它不会让我包含最后的} ,除非它与前一个在同一行。

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

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

嗨,缓存是由于相同的 url 被重复调用。 如果您动态更改 URl,则可以解决此问题。 就像通过在请求中添加带有当前时间的查询字符串(或任何随机重新生成的数字),您可以更改 url 而不会影响结果

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM