【发布时间】:2015-11-04 11:16:28
【问题描述】:
请帮我调试这段代码。当我使用while循环时它挂断了。情况是我想在 base64 字段不再为空时发送发布请求。我不能使用 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);
});
});
【问题讨论】:
-
I can't use setTimeout function- 但是你使用它......两次......不恰当 -
对不起先生,只是复制粘贴了我同事的一些代码..
-
我的意思是我不能使用 setTimeout(function(), delay) 因为延迟是动态的(取决于文件的编码时间)。假设 5Mb 文件需要 10 秒,但 1kb 需要 1 秒。希望你明白我的意思。
标签: javascript jquery loops