等待解析JSON数据

时间:2009-06-14 17:39:54

标签: jquery json callback wait

有没有办法等待jQuery的getJSON方法?

我想解析数据,收到此函数,如果包含特定字符串,则返回false / true。但由于异步数据处理,这似乎并不那么容易。这是一段代码:

contained = false;

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

在这段代码之后,放置此代码的函数返回'包含'值,whis基本上是false,因为getJSON尚未完成。

3 个答案:

答案 0 :(得分:8)

正确的解决方案不是使它同步(这是可能的,但不可取)。它正在使用回调。异步编程需要习惯,但值得。

而不是:

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
  });
}

答案 1 :(得分:6)

您可以尝试执行同步请求,如下所示:

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

答案 2 :(得分:5)

感谢您的回答。我只是将过程设置为同步:

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

之后,使用了我的代码。工作得很好!

更多jQuery Ajax选项here