-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