提问人:Shahnawaz Khan 提问时间:9/30/2023 最后编辑:Mark SeemannShahnawaz Khan 更新时间:9/30/2023 访问量:33
Jquery Ajax 请求 使用循环多次调用
Jquery Ajax request Call multiple times using loop
问:
我需要使用循环在jQuery / JavaScript中执行一项任务。我需要调用一个循环 10 次,在每次迭代中,我需要进行一个 Ajax 调用。在每次迭代中,我还需要检查 Ajax 调用响应中的条件。如果满足条件,则下一次迭代应继续,并提示用户使用确认框。否则,循环应结束。我恳请您协助。
function GetNextBagWeight() {
let res = "OK";
var arr = [];
$.ajax({
url: '/LoadingControl/GetNextBagWeight?BayId=' + 1,
cache: false,
dataType: 'json',
async: false,
success: function(response, status, xhr) {
debugger
var trHTML = '';
var count = 1;
if (response.isSuucess) {
trHTML = '<tr><td>' + count + '</td><td>' +
response.BagWeight + "</td><td>" +
CurrentDateWithTimeString() + "</td></tr>";
$('#tblRunTimeBagData').append(trHTML);
resp = "OK";
arr.push("OK")
} else {
trHTML = '<tr style="background-color: red;"><td>' + count + '</td><td>' +
response.BagWeight + "</td><td>" +
CurrentDateWithTimeString() + "</td></tr>";
$('#tblRunTimeBagData').append(trHTML);
arr.push("wait")
if (confirm('Proceed')) {
alert('Thanks for confirming, start next iteration');
}
}
}
});
return res;
}
这里一切都很好;确认弹出窗口也会出现。但是,在下一次迭代中,后台的 Ajax 调用仍在发生,这应该仅在单击确认按钮后发生。
答:
0赞
Lajos Arpad
9/30/2023
#1
您将需要承诺 AJAX 调用。阅读此文章: https://www.taniarascia.com/how-to-promisify-an-ajax-call/
这是 AJAX 调用的 promisified 版本:
function doTheThing() {
return new Promise((resolve, reject) => {
$.ajax({
url: window.location.href,
type: 'POST',
data: {
key: 'value',
},
success: function (data) {
resolve(data)
},
error: function (error) {
reject(error)
},
})
})
}
请注意:
- 返回 a Promise
- 这在成功时得到解决
- 并在失败时被拒绝
她提供了这个用法示例:
doTheThing()
.then((data) => {
console.log(data)
doSomethingElse()
})
.catch((error) => {
console.log(error)
})
现在,你要让它变得可定制和链接,这个承诺成为下一个的先决条件:
function doTheThing(url, type, data) {
return new Promise((resolve, reject) => {
$.ajax({
url: url,
type: type,
data: data,
success: function (data) {
resolve(data)
},
error: function (error) {
reject(error)
},
})
})
}
因此,假设您有一系列 AJAX 调用要进行,然后:
let currentPromise = undefined;
for (let index = 0; index < myPromises.length; index++) {
let prom = doTheThing(myPromises[index].url, myPromises[index].type, myPromises[index].data);
if (!currentPromise) {
currentPromise = prom;
} else {
currentPromise = currentPromise.then(prom);
}
}
评论