gpt4 book ai didi

javascript - 在ajax beforeSend之前先解析一个函数

转载 作者:行者123 更新时间:2023-12-01 02:19:28 25 4
gpt4 key购买 nike

我试图在使用“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 函数实际上等待 Promise 完成,但 beforeSend 函数在 readfile 函数完成之前不会暂停。

请问我该怎么做?

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

最佳答案

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

https://github.com/jquery/jquery/blob/d7237896c79a5a10d85fcdec199c5657a469a92b/src/ajax.js#L652

// Allow custom headers/mimetypes and early abort
if ( s.beforeSend &&
( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {

// Abort if not done already and return
return jqXHR.abort();
}

因此,不仅不使用返回 false 之外的任何值,当您的 Promise 解析时,beforeSend 回调也已经完成并且 ajax 请求已经开始/完成的。

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

示例:

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

关于javascript - 在ajax beforeSend之前先解析一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49313877/

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