-4
请帮我调试这段代码。当我使用while循环时,它会挂起。这种情况是我想发送一个帖子请求,当base64字段不是空的了。我不能使用setTimeout函数,因为编码时间是动态的,取决于文件大小。JS - 无限while循环但条件已经是假的
$(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);
});
});
'我不能用的setTimeout function' - 但你使用它... ...两次不适当 –
对不起,先生只是复制从我的同事粘贴一些代码.. – Frocky
我的意思是,我不能使用的setTimeout(函数(),延迟),因为延迟是动态的(取决于文件的编码时间)。假设5Mb文件需要10秒,但1kb在1秒内完成。希望你明白我的观点。 – Frocky