簡體   English   中英

JS - 無限循環但條件已經為假

[英]JS - Infinite while loop but the condition is already false

請幫我調試這段代碼。 當我使用 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); }); });

JavaScript 在底層是同步的,所以你不能做你正在做的事情,因為當進入循環時 js 沒有時間執行回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM