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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top