[英]Ajax call not responding on repeated request
我有一个带有下拉菜单的页面。 onchange
事件调用 Javascript function(下),其中包括检索数据并填充TEXTAREA
的 Ajax 块。 从表面上看,一切正常。
我可以 select 列表中的任何项目都没有问题。 但是,如果我 select 之前已选择一个项目,则 Ajax 调用似乎挂起。 看起来可能是一些奇怪的缓存问题之类的。 如果我关闭浏览器并重新加载页面,所有项目都会再次工作,直到我重新选择。
当它挂起时,我已经测试了readyState
和status
属性,但我什么也没得到。 我错过了什么吗?
该页面是身份验证背后的客户端项目,因此我无法发布 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
。 将您的作业移至onreadystatechange
到open/send
代码之前。
嗨,缓存是由于相同的 url 被重复调用。 如果您动态更改 URl,则可以解决此问题。 就像通过在请求中添加带有当前时间的查询字符串(或任何随机重新生成的数字),您可以更改 url 而不会影响结果
我猜你遇到了缓存问题。 我注意到 Internet Explorer 在缓存 ajax 调用方面比 Firefox 更积极。 确定正在发生的事情的一种方法是使用 Fiddler2。 此应用程序监视您的 web 流量,您将能够查看浏览器是否正在发出请求,以及您收到的响应中返回的缓存标头。
您可以从http://www.fiddlertool.com/fiddler/下载 fiddler2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.