Javascript 在发送ajax之前先解析函数
在使用“fileuploader”上传之前,我试图先检查文件, 现在,关于我的beforeSend函数: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
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完成的问题,对吗?