Importar datos de un archivo base con Ajax sin timeout

Importar datos de un archivo base con Ajax sin timeout

El script

  var total_rows = 0;
  var active_ajax = false;
  var request_ajax_num = 0;
  var request_ajax_num_temp = 0;

  function set_active_ajax(value){
    console.log(value);
    active_ajax = value;
  }

  function load_json_contact(start, limit){
    return $.ajax({
      url: '/api/import/json/load',
      data: {start: start, limit: limit},
      type: 'POST'
    });
  }
  //función para enviar archivos por ajax
  function upload_file(){
    var form = $('form')[0];
    var formData = new FormData(form);

    return $.ajax({
      url: '/api/import/json/upload',
      data: formData,
      type: 'POST',
      contentType: false,
      processData: false			
    });
  }
  
  //obtener el array que incluye el rango de filas por envío de ajax
  function create_range(total_range, total, per_request, resto_range){
    var range = [];

    if(total_range > 1){
      var total_int = Math.floor(total_range);
      for (var i = 0; i < total_int; i++) {
        range_value = (i+1)*per_request;
        range.push(range_value);					
      };
      if(resto_range > 0){
        range.push(total);	
      }
      return range;
    }else{
      range.push(total);
      return range;
    }
  }

  //al apretar el botón enviar
  $("form").submit(function( event ) {
    event.preventDefault();
    
    //enviamos por ajax el archivo para obtener el total de filas
    $.when( upload_file() ).then(function(result1){
      //upload_file() - retorna datos en json success, total
      if( result1.success == true &amp;&amp; result1.total > 0 ){
        var total = result1.total;

        //declaramos el array dinamico de promesas de js
        var promises = [];
        
        //total de envíos por ajax para cada envío
        var per_request = 100;
        //total_range total de promesas que vamos a crear, puede ser 3.5 para 350 filas
        var total_range = total/per_request;
        //resto_range se obtinee el resto para agregar una promesa más ejm 0.5 
        var resto_range = total%per_request;

        //enviamos los datos a la función create range, para obtnener los valores de promesas        
        $.when( create_range(total_range, total, per_request, resto_range) ).then(function(range){
					
          setInterval(function(){ 
            
            if(active_ajax == false &amp;&amp; request_ajax_num <  range.length){
              //indicamos con true que se envió un pedido por ajax
              set_active_ajax(true);
              
              i = request_ajax_num;
              start = per_request*i;
              limit = range[i];
              
            $.when(load_json_contact(start, limit)).then(function() {
                set_active_ajax(false);
                request_ajax_num++;
                alert('Loading');
              });
            }else if(active_ajax == false &amp;&amp; request_ajax_num == range.length){
               //cuando se completa la importación
               alert('Complete');
               request_ajax_num++;
            }else if(active_ajax == false &amp;&amp; request_ajax_num > range.length){
              //despues de completar no hacer nada
              request_ajax_num++;
            }
          }, 1000);

        })

      }else{
        alert('Error: upload');
      }
    });
  });

Deja un comentario

15 − 6 =

Cerrar menú