我有一个带下拉列表的页面。 onchange
事件调用Javascript函数(下面),其中包含一个Ajax块,用于检索数据并填充TEXTAREA
。从表面上看,一切正常。
我可以选择列表中的任何项目,没有任何问题。但是,如果我选择之前已选择的项目,则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;
}
}}
编辑:代码块看起来有点古怪;它不会让我包括最后的}
,除非它与前一行在同一行。
答案 0 :(得分:1)
您在发送请求后设置了onreadystatechange
功能。如果它需要很长时间(即如果它进入服务器),这可能会起作用,因为在尝试调用回调之前会有一段延迟。
如果页面已缓存,则浏览器可能会尝试立即在onreadystatechange
方法中调用send
。将您的作业移至onreadystatechange
代码前的open/send
。
答案 1 :(得分:1)
HI, 缓存是由于重复调用的URL相同。如果您动态更改URl,则可以解决此问题。通过添加带有请求的当前时间的查询字符串(或任何随机的renerated数字),您可以更改网址而不影响结果
答案 2 :(得分:0)
我猜你正在遇到一个缓存问题。我注意到Internet Explorer在缓存ajax调用方面比Firefox更具攻击性。确保发生的事情的一种方法是使用Fiddler2。此应用程序监视您的Web流量,您将能够看到浏览器是否发出请求,以及您收到的响应中返回了哪些缓存标头。
下载fiddler2