gpt4 book ai didi

javascript - 使用 ajax 调用循环遍历函数

转载 作者:行者123 更新时间:2023-11-30 00:11:42 25 4
gpt4 key购买 nike

我目前正在循环执行一些验证特定输入值的函数。其中一个特别需要 ajax 调用来验证地址。我看到 SO 上的用户建议使用回调来返回值。

唯一的问题是,当它确实检索到值时,该函数已经在循环中触发并返回了一个未定义的值。我一直在四处寻找,不确定最好的解决方案是什么。我会以某种方式延迟循环吗?我是否首先正确设置了我的功能?需要一些认真的帮助。

var validations = [validateUsername, validatePassword, validateAddress];

function submitForm() {
var inputs = validations.map(function(validation) {
return validation();
});

return inputs.every(function(input) {
return input === true;
}); // [true, true, undefined]
}

function validateAddress() {
function addressIsValid(callback) {
$.ajax({
type: 'POST',
url: '/address/validate',
data: $form.serialize(),
dataType: 'json',
success: function(response) {
return callback(response.Data === 200);
}
});
}

function callback(response) {
return response;
}

return addressIsValid(callback);
}

最佳答案

你应该使用 Promises .

首先,你应该让你的异步函数返回一个 Promise:

function validateAddress() {
return new Promise((resolve, reject)=> {
$.ajax({
type: 'POST',
url: '/address/validate',
data: $form.serialize(),
dataType: 'json',
success: response=> {
response.Data === 200 ? resolve() : reject();
}
});
});
}

然后像这样重写您的 submitForm 函数:

function submitForm() { 
var promises = validations.map(validation=> validation());
return Promise.all(promises)
}

然后你可以像这样使用submitForm:

submitForm()
.then(()=> {
// form is valid
}, ()=> {
// form is invalid
})

关于javascript - 使用 ajax 调用循环遍历函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36223763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com