jquery 如何在下一个之前等待 ajax 调用

jquery how to wait for ajax call before next

我的网站上有一个表格,在某些情况下我需要验证 phone 号码,而在其他情况下我不需要(根据输入字段的变化。

表单由数据库中的数据填充,如果输入“phone_Number”已更改,我需要在按下提交时验证数字。

如果输入“phone_number”未更改,则表单还有其他输入需要验证。

我的问题是:如果 phone 号码发生变化,我需要用 ajax 拨打 2 次电话,而不是 1 次,我不知道最好的方法是什么.我读过 async: false 已被弃用,因此我需要帮助来安排我的代码以使提交工作。

我看过一些不同的 jquery when/wait 示例,但我不理解 jquery 足以将示例结果更改为我的问题。

$(document).on('submit', '#order_form', function(event){
   let form_data = new FormData($('#order_form')[0]);
   let phone_number = $('#phone_number').val();
   form_data.append('customer_name',$('#customer_name').val());
   if($('#old_number').val() != phone_number) {
      $.ajax({
         url: 'https://api.numlookupapi.com/v1/validate/' + phone_number + '?apikey=api_key',
         dataType: 'json',
         success: function(json) {
            form_data.append('valid',json.valid);
            form_data.append('number',json.number);
            form_data.append('local_format',json.local_format);
            .... some additional "form_data.append" happens here ....
         }
      });
   } else {
      form_data.append('local_format',phone_number);
   }
   $.ajax({
      url: "process.php",
      method: 'POST',
      data: form_data,
      contentType: false,
      processData: false,
      success: function () {
         .... do something ....
      }
   });
});`

您可以将第二个 AJAX 调用放在前一个 AJAX 函数的成功方法中。像这样:

function processFormData(form_data)
{
   $.ajax({
      url: "process.php",
      method: 'POST',
      data: form_data,
      contentType: false,
      processData: false,
      success: function () {
         .... do something ....
      }
   });
}

$(document).on('submit', '#order_form', function(event){
   let form_data = new FormData($('#order_form')[0]);
   let phone_number = $('#phone_number').val();
   form_data.append('customer_name',$('#customer_name').val());
   if($('#old_number').val() != phone_number) {
      $.ajax({
         url: 'https://api.numlookupapi.com/v1/validate/' + phone_number + '?apikey=api_key',
         dataType: 'json',
         success: function(json) {
            form_data.append('valid',json.valid);
            form_data.append('number',json.number);
            form_data.append('local_format',json.local_format);
            .... some additional "form_data.append" happens here ....
            processFormData(form_data);
         }
      });
   } else {
      form_data.append('local_format',phone_number);
      processFormData(form_data);
   }
});

当phone号码发生变化时processFormData()只有在API调用成功后才会调用,否则直接调用processFormData()[=13] =]

注意:为什么不直接使用一个AJAX电话,然后检查PHP是否phone号码已经改变?您可以从 PHP 调用 API 来检查号码是否有效。一般来说,您应该始终进行最终输入验证 server-side,因为任何东西 client-side 都可以被操纵。