请帮我调试一下这段代码。当我使用while循环时,它会挂起。情况是我想在base64字段不再为空时发送一个post请求。我无法使用setTimeout函数,因为编码时间是动态的,取决于文件大小。
$(document).on('change','.contract-file', function(){
var textField = $(this).siblings('input:not(.contract-file-encoded)');
var fileName = $(this).val().split("\\").pop();
var contractId = $(this).closest('.personal-accordion').find('input[type=hidden].contractId');
var staffId = $('input[name=staffId]').val();
var base64Holder = $(this).siblings('.contract-file-encoded')
textField.val( fileName ); // show filename
var input = $(this);
setTimeout(function(){
var fileUpload = new FileReader;
var file = input[0].files[0];
var image = new Image();
setTimeout(function(){
fileUpload.onload = function (e){
return function (e){
base64Holder.attr("value",e.target.result);
}
}(file);
fileUpload.readAsDataURL(file);
});
});
while( base64Holder.val().length <= 0 ){
console.log('encoding...');
}
var params = {
_method: 'put',
contract_id: contractId.val(),
is_saving_contract_file: 1,
attribute: { dummy: 'dummy'},
contract_file: base64Holder.val()
};
$.post("/ajax/staffs/"+staffId, params, function(data){
console.log('Ajax return:');
console.log(data);
});
});
&#13;
答案 0 :(得分:0)
JavaScript是同步的,所以你不能做你正在做的事情,因为当输入循环时,js没有时间执行回调。