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

标签 javascript jquery ajax function loops

我目前正在循环执行一些验证特定输入值的函数。其中一个特别需要 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/

相关文章:

ajax - FullCalendar:事件不显示加载但显示如果我打开 IE 开发人员

javascript - 按钮加载和控件属性在表单提交时未更改

javascript - JQUERY AJAX 加载文本框焦点

javascript - 如何记住事件菜单

javascript - 关闭警告框后 URL 中的问号

javascript - 如果文本框不为空,则拒绝页面刷新

javascript - 如何运行 SweetAlert 而不是默认的 javascript 确认方法

javascript - jQuery 事件命名空间不起作用

javascript - 使用 js 更改 url 参数,无需在单击按钮时重新加载页面

javascript - 如何使用 Javascript 将数组从文本区域移动到表格