将 AJAX 请求作为另一个函数的回调调用

Calling AJAX request as a callback of another function

提问人:sverdon 提问时间:5/15/2021 更新时间:5/15/2021 访问量:84

问:

从我在网上找到的所有答案来看,这听起来应该很简单,但我一辈子都想不通......

我正在页面上的对象上运行jQuery每个函数,然后尝试调用AJAX请求作为该函数的回调。我的代码示例如下:

$("#cda").submit(function(e) {

e.preventDefault();

 var form = $(this);
 var url = form.attr('action');

 uploadCDADocs(function(){
   $.ajax({
      type: "POST",
      url: url,
      data: form.serialize(),
      success: function(data)
      {
          alert(data);
      }
   });
 });

});

function uploadCDADocs(callback){

 $('input[name="cda-docs[]"]').each(function(){
   var file = $(this)[0].files[0];

   if(file){
     uploadMultipleFiles(file);
   }

 });

 callback();

}

据我了解,代码应该首先运行 uploadCDADocs 中的所有内容,然后在所有操作完成后才运行 AJAX 请求。

但是,目前 AJAX 与 myFunction 中的代码同时运行。我做错了什么?

我也尝试过使用 $.when.then,但也没有用。我被卡住了。

P.S. - 所有功能都正常工作,我只是无法让它们按顺序运行。

jQuery AJAX 回调

评论

0赞 Klaassiek 5/15/2021
似乎你的函数做了异步的东西。函数是什么样子的?uploadMultipleFiles
0赞 charlietfl 5/15/2021
如果您使用FormData API并发送包含文件的整个表单,则不需要执行这两项操作
0赞 sverdon 5/18/2021
@Klaassiek uploadMultipleFiles 使用 Dropbox API 上传文件,所以是的,异步。这是问题所在吗?在调用 AJAX 之前,如何确保 uploadMultipleFiles 函数全部完成?
0赞 Klaassiek 5/18/2021
Dropbox API 有一个回调,用于表示工作何时完成。您可以将回调传递给该函数,但仅在上传所有文件时触发它,因此if(currentFileIndex === (allFiles.length - 1)){myCallback();}

答: 暂无答案