呼叫被页面加载中断

时间:2010-02-22 21:05:37

标签: ajax asynchronous call reload

我是使用ajax的初学者,我一直认为它是完全异步的。但我发现可以通过页面重新加载或页面更改(例如单击超链接)来中断调用。我的印象是,当ajax调用开始时,无论后来浏览器做什么,它都会被执行。这是错的吗?

现在针对我遇到的具体问题:想一下用户回答问题的在线测试(通过键入文本框)。当文本框失去焦点时,会触发ajax调用,该调用会将文本框的值保留到DB。在文本框之间切换时,这很有效。但是,我还有一个提交按钮,它将一个帖子动作触发到另一个页面(它是提交按钮)。当我在文本框中输入内容并在之后单击按钮时,不会执行调用。此外,当我键入文本框时,单击其他位置(也触发调用)并快速单击提交按钮,也不会进行调用。这是预期的行为吗?

我首先使用ajax的原因是为了保持这些值,所以当发生不可预见的事情时,例如浏览器崩溃,已经输入已经输入的文本。

我的思维方式错了吗?你会如何解决这个问题?

感谢您的时间!

2 个答案:

答案 0 :(得分:2)

AJAX 异步的。

当您发送AJAX请求时,javascript引擎会将其发送出去,并为响应设置处理程序。

但是,如果您向服务器发送AJAX请求,然后在收到之前离开页面,则不会发生任何事情。为什么?因为每次加载页面时整个Javascript环境都被删除并重新初始化,所以它不知道最后一页发生了什么。

对于您的问题,我会拦截表单提交操作并执行您需要处理的数据,然后然后提交表单。

修改:回复您的评论。你是对的。如果发送了ajax请求,并且你不依赖于它的返回值,那么它应该没关系。

我建议您使用Firebug调试问题,看看是否正确发送了 的AJAX调用,并确认您的服务器是否正确处理了它。

答案 1 :(得分:1)

除非您对持久性本地存储执行特殊操作,否则当在当前页面上加载新页面时,所有javascript和ajax调用都会被吹走。在表单上提交时也是如此。

要在页面内保存内容,请尽快保存数据。例如,也许可以通过定时器来节省关键时间,而不仅仅是失去焦点。

重新提交页面:将点击后的行为更改为第一个商店,然后转到新页面。

您看到的所有效果都很正常。

另外,请务必同时测试慢速(即6或7)和快速浏览器(chrome)