jQuery AJAX请求在长请求中中止后重新发送

问题描述:

我有一个非常大的报告,我必须生成,并且我正在使用两个jQuery AJAX请求来执行此操作。第一个发送命令来检查报告。第二个是“checkStatus”函数,它只报告我在原始函数中设置的标志的状态。jQuery AJAX请求在长请求中中止后重新发送

但是,大约一分钟后,原始请求读取“中止”,服务器日志显示第二个“getReport”请求已启动。 Firebug不会显示第二个请求,但肯定会有人进来。服务器绝对不会在原始请求中超时,因为报告最终会生成。唯一的问题是,如果是15分钟的报告,我有15个服务器饥饿的请求同时运行,最终导致我们的服务器崩溃。最后,如果我关闭运行请求的浏览器窗口,它不会导致多个请求,所以它肯定来自浏览器。

哦,它在我的本地主机上正常工作,但死在真正的服务器上,尽管相同的一切(甚至PHP版本)。

这是一个超级奇怪的问题。有任何想法吗?

+0

你使用什么浏览器? – wajiw 2012-02-28 19:09:53

+0

同样在每个浏览器中,mac:chrome,safari,FF。 Windows:IE 8/9,FF,Chrome – 2012-02-28 19:19:55

+0

你有没有找到这个解决方案?我遇到了同样的问题(长时间的请求被中止,然后以静默方式重新发送)。 – 2013-09-18 23:22:13

我会尝试通过对报告进行积极的回报来调试它,而不运行报告来查找代码中哪里失败。这个问题可能来自您的任何JS/Apache /后端脚本区域。

如果应用程序从ajax - > server - > client没有进行您的报告调用,然后你的报告代码中的东西导致请求炸弹。

+0

即注释掉它的实际报告生成方面,看看我能否得到回报?我做。没问题。我认为这不是报告调用 - 在localhost上可以正常工作。但Apache后端有一些可能性。我们确实在所有地方都使用AJAX,所以大部分时间AJAX都可以正常工作。这只是偶尔... – 2012-02-28 19:55:33

+0

另外,另一个新的发展。我添加了一些阻止来自多个请求的代码(检查是否正在运行,如果是,则返回)。报告有效,但检查状态功能会在一段时间后停止运行。 – 2012-02-28 20:37:53

+0

您可能想要考虑重新设计您的呼叫,以便尽可能减少对方的依赖。似乎它太复杂了,调试可能比找到一个不同的解决方案需要更长的时间。确保你的所有ajax调用都不依赖于系统进程(即生成报告)。找到一种仅用于获取已处理数据的AJAX的方法可能比您尝试使用的方法更好。阿贾克斯投票是你的朋友=) – wajiw 2012-02-28 21:46:21