在我的javascript代码中,当有人更改选项并单击Go时。它是多个项目的更改属性。我看到每个项目的保存按钮和编辑按钮。
所以我在更改选择和点击Go后手动点击了按钮。
for (var i = 0; i < checked.length; i++) {
var cur = checked[i];
$(cur).parents('tr').find('.transaction-category-wrapper .select2').val(catId);
$(cur).parents('tr').find('.transaction-verify-wrapper .btn-save').click();
}
现在问题是我要刷新页面,但确保响应已经到达页面。我怎么能实现它。
我正在考虑实现setTimeout,但如果服务器没有执行并且超时只是刷新页面,那么它不是一个好选择。
jQuery是否有一些属性让我知道javascript请求已经完成并且已收到响应。
$(document).on('click', '.btn-save', function () {
// val logic
$.post("/Entries/AddEntries", val, function (r) {
enableTooltip();
});
});
答案 0 :(得分:1)
您可以使用.then
来处理AJAX请求的成功和失败案例:
$.post("your_url", { ... })
.then(function() {
// If succeeded
}, function() {
// If failed
});
.post
返回一个jQuery deferred
对象,可以使用.then()
处理程序进行响应。 .then
的第一个参数被视为成功处理程序,第二个参数是失败处理程序。
如果有多个AJAX调用,您可以使用$.when
在所有AJAX调用完成后执行操作。
$.when($.post( ... ), $.post( ... ))
.then(function() {
// If all AJAX calls succeed
}, function() {
// If any of the call fails
});
答案 1 :(得分:1)
因为每次点击都会生成一个帖子请求。您需要跟踪数组中的所有请求,然后等待它们解决。因此,您的代码应如下所示:
var requests = [];
$(document).on('click', '.btn-save', function () {
// val logic
requests.push($.post("/Entries/AddEntries"));
});
Promise.all(requests).then((data) => {do something});