Javascript 在发送ajax之前先解析函数

Javascript 在发送ajax之前先解析函数,javascript,jquery,promise,Javascript,Jquery,Promise,在使用“fileuploader”上传之前,我试图先检查文件, 现在,关于我的beforeSend函数: beforeSend: function(item, listEl, parentEl, newInputEl, inputEl) { var file = item.file; let readfile = function(file){ return new Promise(function(resolve

在使用“fileuploader”上传之前,我试图先检查文件, 现在,关于我的beforeSend函数:

beforeSend: function(item, listEl, parentEl, newInputEl, inputEl) {
            var file = item.file;

            let readfile = function(file){
                return new Promise(function(resolve, reject){
                console.log(file);
                    var reader = new FileReader();
                    var duration = 0;
                    reader.onload = function() {
                        var aud = new Audio(reader.result);
                        aud.onloadedmetadata = function(){
                            resolve(aud.duration);
                        }; 
                    };
                reader.readAsDataURL(file); 
                });
            }

          return readfile(file).then(function(res){ 
                if(res>60){ 
                    console.log('more than 60');
                    return false; 
                 }
                 else{
                    console.log('uploaded');
                    return true;
                 }

        }); 

        },
我的readfile函数实际上是在等待承诺完成,但是在readfile函数完成之前,beforeSend函数不会暂停

请问我该怎么做

我知道它不会返回false,因为即使我的承诺返回false,http请求仍然会发出。

您可以这样做

$(document).on('sendAjax',function(){
//Write your ajax code here
});

$(document).trigger("sendAjax");
创建自定义事件sendAjax,将其与文档绑定,并在成功上载文件后触发事件。在
$(document.ready()

通过这种方式,只有在成功上传文件后才会发送ajax

希望有帮助。

你可以这样做

$(document).on('sendAjax',function(){
//Write your ajax code here
});

$(document).trigger("sendAjax");
创建自定义事件sendAjax,将其与文档绑定,并在成功上载文件后触发事件。在
$(document.ready()

通过这种方式,只有在成功上传文件后才会发送ajax


希望有帮助。

根据jQuery代码,
beforeSend()
不使用回调函数返回的值,而是检查是否返回了
false

因此,不仅返回除
false
之外的任何值都没有使用,而且当您的承诺解决
beforeSend
回调时,回调已经完成,ajax请求已经启动/完成

如果您想事先执行一些异步操作,则需要在实际调用
jQuery.ajax()之前执行

例如:

new Promise((resolve,reject)=>{
   //...
}).then(()=>{
   return $.ajax({
     //....
   });
});

根据jQuery代码,
beforeSend()
不使用回调函数返回的值,而是检查是否返回了
false

因此,不仅返回除
false
之外的任何值都没有使用,而且当您的承诺解决
beforeSend
回调时,回调已经完成,ajax请求已经启动/完成

如果您想事先执行一些异步操作,则需要在实际调用
jQuery.ajax()之前执行

例如:

new Promise((resolve,reject)=>{
   //...
}).then(()=>{
   return $.ajax({
     //....
   });
});

beforeSend不支持承诺,这意味着它不会使用返回的承诺对象。在调用整个ajax调用之前,您需要进行文件检查,即从promise callback.ohh执行ajax调用。。我不知道!谢谢为此花了几个小时为什么不改用回调是的,使用“onloadend”更有意义,但它仍然不能解决我在“beforeSend”上等待filereader完成的问题,对吗?beforeSend不支持承诺,这意味着它不会使用返回的承诺对象。在调用整个ajax调用之前,您需要进行文件检查,即从promise callback.ohh执行ajax调用。。我不知道!谢谢花了几个小时来做这个LOL为什么不改用回调是的,使用“onloadend”更有意义,但它仍然不能解决我在“beforeSend”上等待filereader完成的问题,对吗?