Ajax não subescreve variável

Bom dia pessoal!!

Estou com um problema que talvez para vocês seja muito fácil de resolver!

Não consigo copiar o resultado para a variável registroJson, já perdi quase um dia nesse problema;

$(document).ready(function(){

  var registroJson = [];
  var url = 'xpto';  
  
  $.getJSON(url,function(data){
 
    registroJson = data; //copiando para variavel registroJson o resutado 'data' 
    
    // já tentei registroJson.push(data) e tabem não funciona    
  }); 
  
  console.log(registroJson); //o resultado no console sempre mostra [], array vazio
  
});

Coloque a linha console.log(registroJson); dentro do getJSON que irá funcionar.

Porque isso? Simples. A função getJSON faz uma chamada AJAX assíncrona à um recurso. Quando essa chamada é feita, uma requisição é realizada, mas o código javascript continua executando, ou seja, a linha console.log(registroJson); poderá ser executada antes mesmo da requisição obter uma resposta, e isso fará que ela seja mostrada como array vazio.

1 curtida

É exatamente o que o @Lucas_Camara falou. Outra dica, utilize os eventos do jQuery para realizar as ações de callback. O getJson tem os eventos done, fail e always.

Ex: https://gist.github.com/hugodias/bad41f16293ed542c0299452a273e769