Obtendo dados do método $.getJSON()
-
12-09-2019 - |
Pergunta
Estou escrevendo uma aplicação web e preciso inicializar alguns parâmetros que estou extraindo através do método $.getJSON().
$.getJSON("../config/", function(data)
{
console.debug(data);
}
Agora, como esses valores serão usados globalmente em todo o script e não acionarão um evento diretamente (que é a única implementação de $.getJSON() que encontrei na documentação), como posso retornar ou recuperar esses dados de retorno de chamada?
Solução
Sua melhor aposta é seguir a técnica de retorno de chamada.
Existem 2 maneiras reais de fazer isso funcionar, ambas são essencialmente iguais.
$.getJSON("../config/", function(data) {
SomeObject.config = data;
SomeObject.load(); # assuming load tells some-object that it now has data and to get cracking
});
ou
$.getJSON("../config/", function(data) {
SomeObject.load( data ); # SomeObject sets itself up and starts doing its thing
});
Tentando usar $.getJSON de forma síncrona (ou seja:fazer com que ele retorne um valor) só terminará em lágrimas e miséria para vocês dois e as pessoas que usam seu site, porque as conexões síncronas tendem a bloquear toda a IU.:)
Do jeito que está, fazer algo assim de forma assíncrona
var i = null; #1
$.getJSON("../config/", function(data) { #2
i = data; #3
}); #4
some_function_with(i); #5
Não funcionará, porque é quase garantido que a linha 5 seja executada antes da linha 3.
Outras dicas
Kent Frederico:Não tenho certeza se sua abordagem pode ser melhor, então, se seu método for melhor, deixe-me saber como e aceitarei sua solução em vez da minha, mas foi assim que fiz:
var my_data = null;
$.ajax(
{
url: "../config/",
dataType: "json",
async: false,
success: function(data)
{
my_data = data;
}
});
Obrigado também RichieHindle, não sabia que era possível substituir variáveis fora das funções sem retorno.