Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ajax请求进行时重新加载页面会给出空响应,状态为零_Ajax - Fatal编程技术网

在Ajax请求进行时重新加载页面会给出空响应,状态为零

在Ajax请求进行时重新加载页面会给出空响应,状态为零,ajax,Ajax,浏览器是Firefox3.0.10。我正在请求使用Ajax的页面。正在进行响应的readyState可能小于4。与此同时,我正在尝试重新加载页面。请求结束,给出一个空响应 我使用alert查找作为响应文本给出的字符串。我假设此时达到就绪状态4。为什么它是一个空字符串 当我提醒xmlhttpobject.status时,它显示为0 当我向xmlhttpobject.statusText发出警报时,会发生异常,声明“不可用” 当我在文档中阅读时,它说3和4的status和statusText可用,但

浏览器是Firefox3.0.10。我正在请求使用Ajax的页面。正在进行响应的readyState可能小于4。与此同时,我正在尝试重新加载页面。请求结束,给出一个空响应

我使用alert查找作为响应文本给出的字符串。我假设此时达到就绪状态4。为什么它是一个空字符串

当我提醒xmlhttpobject.status时,它显示为0

当我向xmlhttpobject.statusText发出警报时,会发生异常,声明“不可用”

当我在文档中阅读时,它说3和4的
status
statusText
可用,但当我测试时,只有status可用,而不是satausText

下面是示例代码

假设我请求了一个页面,我的回调函数如下

function cb(rt)
{
   if(rt.readyState==4)
   {
      alert(rt.status);
      alert(rt.statusText); // which throws an exception
   }
}
sleep(30);
//flushing little drop down code
我的服务器端脚本如下

function cb(rt)
{
   if(rt.readyState==4)
   {
      alert(rt.status);
      alert(rt.statusText); // which throws an exception
   }
}
sleep(30);
//flushing little drop down code
除此之外,我注意到以下几点

再次假设我使用Ajax请求上述脚本。 现在将有30秒的空闲时间。 在30秒之前,我按刷新。 我将xmlhttpobject.status设置为0,但浏览器直到30秒后才重新加载页面。为什么?

当我在Ajax请求完成之前刷新页面时,状态值设置为零,就绪状态设置为4,但是页面仍然等待服务器的响应结束

发生了什么事

我之所以要面对这样的事情,原因如下

每当我执行Ajax请求时,如果这个过程成功了,比如插入了一些东西或者删除了一些东西,我就会弹出一个div,声明更新成功,然后我会重新加载页面。但是如果有任何错误,那么我不会重新加载页面,而是提醒您无法处理此请求

如果用户在这些请求完成之前重新加载页面,我会得到一个空响应,在我的计算中,这是一个服务器错误。因此,我调试了Ajax响应,以过滤出由于用户按下了重新加载而导致连接中断的信息。因此,这次我不想在用户在请求完成之前重新加载页面时显示“无法处理此请求”

哦。。。说来话长。这是一个很长的描述,这样我可以让专家理解我的疑问

所以我想从上面得到什么

任何类型的回答都会让我头脑清醒。或者我想说所有类型的答案

编辑:12月19日。 如果我没有得到任何正确的答案,那么我将删除这个问题,并用例子重写。否则我会在实验后接受


我将创建一个演示程序,并在此处发布链接,以便让您了解我面临的问题。今天是2010年12月29日。

您在那里使用的是相当旧的Firefox版本。3.0.10是一年半前推出的。从那时起,情况发生了变化。关于这一点,有一些旧的Mozilla和Firefox错误。它们已经关闭了,看起来就像Firefox3在测试版时关闭了一样,但你永远不知道,可能已经出现了倒退。这是一种可能性:

所以,这就是我认为正在发生的事情。我怀疑重装导致任何打开的http请求被中止。从历史上看,Firefox并没有很好地处理abort——我认为他们打算将readyState设置为0,但在设置过程中它会循环使用4


如果可能的话,我建议您(和您的用户)升级Firefox。如果这是不可能的,你将不得不设法解决这个问题。测试status==0并防止您的警报触发将是一个开始。您还可以在窗口的onBeforeUnload事件中设置一个标志

这与浏览器版本无关

浏览器检测到页面更改(如重新加载)时,会中止所有调用。每个浏览器都这样做。这是一件体面的事情

我的问题是:为什么在ajax请求工作时重新加载页面


我的解决方案是:跟踪所有ajax请求并“手动”中止它们(是的,您可以这样做:当您离开页面时(
onunload
onbeforeunload
)。

我也有同样的问题,让我与您分享我为使其正常工作所做的工作。
在构建ajax请求时,我给出了参数
global:false
。因此,即使我们导航到任何其他页面,ajax请求仍在运行,它也会根据需要启动页面。

我也遇到了同样的问题,这是PHP会话的问题。 如果会话已打开,则来自同一会话的所有其他请求都必须等待

要解决此问题,请确保不在服务器端脚本中启动新会话

如果您正在使用某个框架,并且该框架会自动启动会话,则可能会出现问题。在这种情况下,只需在所有长轮询服务器端脚本的开头添加以下行:

session_write_close();

我遇到了同样的问题(在Chrome中),对我来说,当我在XHR请求的中间进行刷新时,浏览器将其视为一个错误。因此,如果我们在<代码> $Ajax < /Cudio>调用中指定了一个错误块,浏览器会将其作为错误弹出。< /P>


作为一种解决方法,我只指定了一个成功块,错误消失了。看起来这是一种应该由浏览器自己处理的情况。

您在使用什么浏览器时遇到了这种情况?我的第一行…firefox 3.0.10尝试将睡眠时间降低到10秒,也许请求超时30秒对您来说是一个基本问题,为什么您应该这样做想要重新加载页面??Ajax只用于添加内容和检查状态,不需要重新加载页面,如果要重新加载页面,只需发布内容并使用新元素重新加载页面。我认为选择Ajax和重新加载页面都是错误的。+1很好地解释了困难的情况相同。没有区别特温·芙和伊恩·拉加丁,今天从国际比赛开始