3

我是一个使用 ajax 的初学者,我一直认为它是完全异步的。但我发现调用可能会因页面重新加载或页面更改(如单击超链接)而中断。我的印象是,当启动 ajax 调用时,无论浏览器之后做什么,都会执行它。那是错的吗?

现在谈谈我遇到的具体问题:想想用户回答问题的在线测试(通过输入文本框)。当文本框失去焦点时,将触发一个 ajax 调用,将文本框的值保存到数据库中。在文本框之间切换时效果很好。但是,我还有一个提交按钮,它会触发对另一个页面的发布操作(它是提交按钮)。当我在文本框中输入内容并随后单击按钮时,不会执行呼叫。此外,当我在文本框中输入内容时,单击其他地方(也触发调用)并迅速单击提交按钮,调用也不会进行。这是预期的行为吗?

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

难道我的思维方式不对?你将如何解决这个问题?

感谢您的时间!

4

2 回答 2

2

AJAX异步的。

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

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

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

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

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

于 2010-02-22T21:12:40.867 回答
1

除非您对持久性本地存储进行特殊处理,否则当在当前页面上加载新页面时,所有 javascript 和 ajax 调用都会被吹走。此外,当在表单上完成提交时。

要保存页面内的内容,请尽快保存数据。例如,也许节省键控,也许定期使用计时器,而不仅仅是失去焦点。

重新提交页面:将点击行为更改为先存储,然后转到新页面。

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

此外,请务必在慢速(即 6 或 7)和快速浏览器(chrome)上进行测试

于 2010-02-22T21:11:38.887 回答