【发布时间】:2014-07-22 13:34:20
【问题描述】:
我正在处理通过 ajax 保存的表单,这部分工作得非常好。我遇到的问题是用户在保存表单之前单击另一个链接将用户重定向到另一个页面时丢失了数据。
作为一个解决方案,我想到了使用 JavaScript 函数,所以onclick 的超链接我提示用户在继续之前保存数据。我正在使用通过 AJAX 保存数据并在成功保存后重定向用户的相同功能。这就是我的提示的样子。
function saveThenRedirect(redirect) {
if (confirm("Please save your data before moving away") == true) {
update();// AJAX function that saves the data
window.location = redirect;//redirect the user
} else {
window.location = redirect;
}
}
事情在update()之前;函数有机会保存数据,用户被重定向或在保存重定向的过程中发生。所以这就是我需要帮助的地方,我该怎么做才能首先运行 update() 函数,并且只有在它完成运行重定向用户后才能运行?
注意:我确实查看了window.onbeforeunload,但我决定使用简单的提示,然后使用函数保存和重定向。
这就是我的update 函数的样子
function update() {
$.ajax({
type: "POST",
url: "classes/data.class.php",
data: $("#pay-form").serialize(),
beforeSend: function () {
$('#dvloader').show();
},
success: function (html) {
var load1 = new $.Deferred();
var load2 = new $.Deferred();
var load3 = new $.Deferred();
var load4 = new $.Deferred();
$.when(load1, load2, load3, load4).then(function () {
$('#dvloader').hide();
});
$('#income-expense-div').load('dashboard-sidebar.php', function () {
load1.resolve();
});
$('#pay-div').load('dashboard-pay.php', function () {
load2.resolve();
});
$('#assets-div').load('dashboard-assets.php', function () {
load3.resolve();
});
$('#liabilities-div').load('dashboard-liabilities.php', function () {
load4.resolve();
});
}
});
}
我将非常感谢任何帮助。
请注意update 是与保存按钮一起使用的相同功能(不需要重定向)。如果我在 ajax 成功调用中添加重定向,用户将被重定向。仅当用户单击另一个链接时才需要此重定向,因此需要先进行保存,然后再进行重定向
【问题讨论】:
-
根据您实现 AJAX 请求的方式以及您使用的框架(如果有),您可以添加仅在请求成功完成时执行的“成功”处理程序,您可以在其中可以重定向用户。如果您向我们展示了您的 AJAX 实现的基本原理,我们可以针对您的情况为您提供更具体的帮助。
-
可以分享一下你的更新功能吗?
-
如果
update()是异步操作,那么您将立即执行下一行(重定向)并忽略AJAX 操作。您需要执行该以响应异步操作。根据您进行 AJAX 调用的方式,可以采用几种不同的方式进行构建。 -
您正在寻找的称为“回调”函数,该函数在另一个函数完成时调用。这允许您将应用程序事件链接在一起。像 jQuery 这样的框架包含了这一点,并使其非常易于使用。
-
我正在使用 jQuery,并且我已经用
update函数更新了我的问题。请注意,这是与Save按钮一起使用的相同功能。如果我在 ajax 调用中添加重定向,用户将获得重定向。仅当用户单击另一个链接时才需要此重定向,因此需要先进行保存,然后再进行重定向
标签: javascript php ajax redirect