在使用'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,因为http请求仍然在发出,即使我对我的承诺返回了false。
发布于 2018-03-15 21:56:41
按照jQuery代码,beforeSend()
不使用回调函数返回的值,而是检查false
是否返回。
https://github.com/jquery/jquery/blob/d7237896c79a5a10d85fcdec199c5657a469a92b/src/ajax.js#L652 //允许自定义标头/mimetype和早期中止if ( s.beforeSend &( s.beforeSend.call( callbackContext,jqXHR,s) === false custom )){ // abort (如果尚未完成,则返回jqXHR.abort();}
因此,不仅返回没有使用的false
以外的任何值,而且当您的承诺解决时,beforeSend
回调将已经完成,而ajax请求已经启动/完成。
如果您想事先执行一些异步操作,则需要在实际的jQuery.ajax()
调用之前执行该操作。
示例:
new Promise((resolve,reject)=>{
//...
}).then(()=>{
return $.ajax({
//....
});
});
发布于 2018-03-15 21:51:41
你可以做到这一点。
$(document).on('sendAjax',function(){
//Write your ajax code here
});
$(document).trigger("sendAjax");
创建自定义事件sendAjax,将其与文档绑定,并在文件成功上传后触发事件。在$(document).ready()
中使用文件上传功能
$(document).ready(function(){
function myfunction(){
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');
$(document).trigger("sendAjax");
return true;
}
});
}
});
通过这种方式,ajax只能在成功上传的文件之后发送。
希望能帮上忙。
https://stackoverflow.com/questions/49313877
复制