我有一个函数uploadFunction,它通过使用JQuery ajax调用的Rest Web服务在我的服务器上上传文件。 我也将此方法用于另一个函数,我需要知道创建Web服务调用的结果,或者使用已上载文件的名称减少一行。 变量的实际方法不起作用,有没有办法知道文件是否正确上传? 我尝试使用async:false(因为我无论如何等待上传)但我的等待模式出现并且上传结束而不是立即。
/usr/lib/pymodules/python2.7
调用uploadFunction的函数是这样的:
function uploadFunction(fileType){
//CSRF attribute for spring security
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
var formData = new FormData();
var fileControl = document.getElementById(fileType);
var length = fileControl.files.length;
for(var i = 0; i< length; i++){
formData.append('file[]',fileControl.files[i]);
}
formData.append('idFleet', selectedFleet);
formData.append('idCar', $("#selectedCar").val());
if(fileType!='dat')
formData.append('initialKm', 0);
else
formData.append('initialKm', $("#initialKm").val());
jQuery.ajax({
url : 'upload',
type: 'POST',
contentType: false,
processData: false,
data:formData,
beforeSend:function(xhr) {
xhr.setRequestHeader(header, token);
waitingModal.showPleaseWait();
},
success: function(data,status,xhr){
//No exception occurred
if (data.status){
//Also the field are right(for e.g. form value)
if(data.success){
//Store information if file is datatable
if (fileType=='datatable')
$("#datatablePath").val(data.result[0]);
notifyMessage(fileType + " has been uploaded!", 'success');
uploadResult=true;
}
else{
//code if there are some error into form for example
}
} else {
notifyMessage(data.result, 'error');
$('#acquisitionWizard').bootstrapWizard('show',2);//show
uploadResult=false;
}
},
error: function(xhr,status,e){
window.location.href = "/ATS/500";
}
}).complete(function() {
//add timeout because otherwise user could see a too fast waiting modal
setTimeout(function(){
waitingModal.hidePleaseWait();
}, 1000);
});
}
答案 0 :(得分:3)
使用承诺。只需从uploadResult()
返回ajax承诺(其返回值),并在.then
或.done
调用中添加后续代码:
e.g。
function uploadFunction(fileType){
[snip]
return jQuery.ajax({
并使用如下:
uploadFunction('dat').then(function(uploadResult){
if (uploadResult){
[snip]
}
});
永远不要使用async: false
。它阻止浏览器进行任何其他处理。始终使用异步操作。