Pergunta

Existe uma maneira de esperar por método getJSON do jQuery?

Eu quero analisar os dados, recebidas com esta função e apenas retornar falso / verdadeiro se uma seqüência específica está contida. Mas, devido ao processamento dos dados assíncronos este parece não ser tão fácil. Aqui está um trecho de código:

contained = false;

$.getJSON(URL, function ( data ) {
    $.each( data, function( i, item ) {
        if ( item.Info.code == code ) contained = true;
    });
});

Depois de código thid, a função, em que este código é colocado em, devolve o valor 'continha', whis é basicamente falso, porque getJSON ainda não terminou.

Foi útil?

Solução

Você poderia tentar fazer um pedido síncrono, como este:

 $.ajax({
      type: "GET",
      url: "www.foo.com",
      data: data
      async: false,
      dataType: "json"
  });

Outras dicas

A solução adequada não é o que torna síncrona (isto é possível, mas não é aconselhável). Ele está usando uma chamada de retorno de forma adequada. programação assíncrona leva tempo para se acostumar, mas vale a pena.

Em vez de:

function foo()
{
  ...

  contained = false;

 $.getJSON(URL, function ( data ) {
      $.each( data, function( i, item ) {
          if ( item.Info.code == code ) contained = true;
      });
  });

  // Do something with contained
}

fazer:

function getContained(containedCallback)
{
  $.getJSON(URL, function(data)
  {
    var contained = false;
    $.each( data, function( i, item ) {
        if ( item.Info.code == code ) contained = true;
    });
    containedCallback(contained);
  }
  );
}

function foo()
{
  ...
  getContained(function(contained)
  {
     // Do something with contained
  });
}

Obrigado por sua resposta. Eu só definir o processo para síncrona:

$.ajaxSetup({'async': false});

Depois disso, usei o meu código. Trabalhando muito bem!

Mais opções jQuery Ajax aqui

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