Ожидание анализа данных JSON - PullRequest
4 голосов
/ 14 июня 2009

Есть ли способ ждать метод getJSON в jQuery?

Я хочу проанализировать данные, полученные с помощью этой функции, и просто вернуть false / true, если содержится конкретная строка. Но из-за асинхронной обработки данных это не так просто. Вот фрагмент кода:

contained = false;

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

После кода thid функция, в которую помещен этот код, возвращает значение «содержащиеся», поскольку в основном это значение false, поскольку getJSON еще не завершен.

Ответы [ 3 ]

8 голосов
/ 14 июня 2009

Правильное решение не делает его синхронным (это возможно, но не рекомендуется). Он использует обратный вызов соответственно. Асинхронное программирование требует привыкания, но оно того стоит.

Вместо:

function foo()
{
  ...

  contained = false;

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

  // Do something with contained
}

сделать:

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
  });
}
6 голосов
/ 14 июня 2009

Вы можете попробовать выполнить синхронный запрос, например:

 $.ajax({
      type: "GET",
      url: "www.foo.com",
      data: data
      async: false,
      dataType: "json"
  });
5 голосов
/ 14 июня 2009

Спасибо за ваш ответ. Я просто установил процесс синхронно:

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

После этого использовал мой код. Работает просто отлично!

Дополнительные параметры jQuery Ajax здесь

...