3

序言范围我的问题:

我有一个 Web 应用程序(或站点,这是一个内部 LAN 站点),它广泛使用 jQuery 和 AJAX 在浏览器中动态加载 UI 的内容部分。用户使用导航菜单导航应用程序。单击导航菜单中的项目会对 php 进行 AJAX 调用,然后 php 返回用于填充中心内容部分的内容。

由 php 提供的其中一个页面有一个表格,其设置类似于电子表格,用户可以在其中输入值。该表始终与数据库中的数据保持同步。因此,当创建表时,它是否填充了相关的数据库数据。然后,当用户在“单元格”中进行更改时,该更改会立即写回数据库,因此表和数据库始终保持同步。这种方法是为了向用户保证他们输入的数据已被保存(长篇大论......),并减轻他们不得不点击某种保存按钮的负担。

所以,这个总是同步的想法很好,除了用户可以在一个单元格中输入一个值,而不是将焦点移出单元格,然后采取任何可能导致最后一个值丢失的操作:例如导航到通过导航菜单访问网站的另一部分,退出应用程序,关闭浏览器等。

序言结束,正题:

我最初认为这不是问题,因为我只会跟踪哪些数据是“脏的”或未保存的,然后在 onunload 事件中我会对数据库进行最后的写入。问题就在这里:由于我聪明(或不太聪明,不确定)使用 AJAX 并动态加载内容部分,当采取上述操作时,用户实际上从未离开原始 url 或页面,除了关闭浏览器。因此,onunload 事件不会触发,我又回到了丢失最后一个数据的状态。

我的问题是,当以这种方式动态加载内容时,是否有推荐的方法来确定一个人是否正在离开应用程序的“部分”?

我可以想出一个我认为的解决方案,它涉及全局变量和跟踪当前查看的页面,但我想我会检查是否有更优雅的解决方案,或者我可以在我的设计中做出改变,这将使这项工作。

一如既往地提前感谢!

4

2 回答 2

1

我想在这里跟进,以防万一有人感兴趣。事实证明我的问题是不必要的。

因为我设置了代码以将输入的信息保存在输入元素的更改事件中,并且由于更改事件仅在相关元素失去焦点时触发,所以如果用户单击我的 Web 应用程序界面中的其他任何位置,那触发输入的更改事件,并保存数据。

唯一的例外是刷新页面或关闭浏览器,但这两个事件都会导致 onunload 事件,这意味着我可以将我的保存数据函数绑定到该事件并处理这些情况。

所以一切都按我希望的那样工作,而我的困惑源于对更改事件何时触发的误解。

于 2010-05-20T16:44:13.483 回答
0

AJAX 对于网站导航来说通常是多余的。除非有使用 AJAX 的令人信服的理由,否则我只会让您的导航菜单使用良好的旧链接而不是 AJAX 调用。

AJAX 用于让用户沉浸在应用程序中,而不会看到整个页面刷新的闪烁等。但是,如果他们计划导航到另一个页面,则需要完整的页面刷新(因此是可取的)。

于 2010-05-14T13:01:44.177 回答