Problems with $.get and PHP

Asked

Viewed 44 times

0

Gelera, I’m hitting myself a little hard to figure out what’s going on with a code I put together. I have a loop that downloads files .csv from a server specific to my server. There are 9 files. After the downloads finish I need to delete the bases, perform the inserts again and delete the files, it seemed simple but some things are getting out of control.

At first the file "insert_delete.php" received the 3 loops of the 9 files, but it got lost and registered logs stating duplicate insertions and delete files. So I separated it into 3 files, it stopped happening.

An odd question is that when I directly run the file "insert_delete.php" everything happens inside the conforms, but when I run by script the base is going blank, as if the TRUNCATE happened after the foreach.

I think there’s something going on and I don’t see it.

Come on the mess I made:

Script

//Contagem dos arquivos se houver mais que 8 arquivos realiza a solicitação de inserção, se não continua contando
function cont(){
    setTimeout(function(){
        $.get("query/cont_arquivos.php", function( data ) {
            if(data < 9){
                $('.box_loading').show();
                $(".cont").html(
                    "Aguardando arquivos "+data
                );
                cont();
            }else{
                $.get("insert_delete.php", function(){});
                $.get("insert_delete1.php", function(){
                    $('.box_loading').hide();
                });
                $.get("insert_delete2.php", function(){});

                $(".cont").html(
                    "Inserindo nas bases... "
                );
            }
        });

    },1000);
}

PHP(Insert delete)

<?php
include "conn.php";

$files1 = glob('nomedosarquivos*.csv'); // obten alguns arquivos da pasta

$sql = "TRUNCATE TABLE nomedatabela"; //apaga a base
$conn->query($sql);

if(count($files1)>2){
  foreach($files1 as $file){ // loop dos 3 arquivos
    if(is_file($file))
    if (($base = fopen($file, "r")) !== FALSE) {
        $count = 0;
        $ok = 0;
        $erro = 0;
        while (($data = fgetcsv($base, 0, ";")) !== FALSE) {
            $data = array_map("utf8_encode", $data);
            $count++; //contar as linhas
            if ($count == 1) { continue; } //não inserir os titulos

            if ($data[0] == "") { break; } //sai do while se este campo estiver em branco

            //validações de campos

            $sql = "INSERT into nomedatabela (campos....) VALUES (dados..)";
            if($conn->query($sql)==TRUE){
                $ok++;
                //somente conta as linhas que foram inseridas

            }else{
                //conta os erros
                $erro++;
                //executa o log informando qual erro e em qual linha aconteceu
            }
        }
        fclose ($base);
        if(unlink($file)){
            //executa o log informando que o arquivo foi deletado
        }else{
            //executa o log informando um erro ao deletar o arquivo
        }
      }
    }
  }
 ?>
  • You are used asynchronous ajax ($.get) calls waiting for it to run on the server synchronously. Try to chain calls.

1 answer

2


You have tried using $.get(). done(). Always(). fail()?

From what I’ve seen, these methods would have to be called after the previous termination ....

  function cont() {
    setTimeout(function () {
        $.get("query/cont_arquivos.php", function (data) {
            if (data < 9) {
                $('.box_loading').show();
                $(".cont").html(
                    "Aguardando arquivos " + data
                );
                cont();
            } else {
                $.get("insert_delete.php", function () { })
                .done(function () {
                    $.get("insert_delete1.php", function () {
                        $('.box_loading').hide();
                    }).done(function () {
                        $.get("insert_delete2.php", function () {
                        }).done(function () {
                            $(".cont").html("Inserindo nas bases... ");
                        });
                    });
                });
            }
        });
    }, 1000);
}
  • I think that’s right, it seems to me that the way I was performing $.get was more than one request to the file, resolved. Thank you very much.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.