JS - 无限循环但条件已经错误

时间:2015-11-04 11:16:29

标签: javascript jquery loops

请帮我调试一下这段代码。当我使用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;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

JavaScript是同步的,所以你不能做你正在做的事情,因为当输入循环时,js没有时间执行回调。