2009-06-14 106 views
4

有没有办法等待jQuery的getJSON方法?等待JSON数据解析

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

contained = false; 

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

THID代码后,函数,其中该代码放置在返回的“包含的价值,WHIS基本上是假的,因为的getJSON尚未完成。

回答

6

你可以尝试做一个同步的请求,就像这样:

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

由少数一秒+1 +1 – ichiban 2009-06-14 17:49:45

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

打我,我不知道为什么人们抵制回调在Javascript这么多... – 2009-06-14 18:28:44

+0

哇,我从来没有见过的JavaScript一样使用这之前。我只是为了这个答案而偏爱这个问题。 – Strawberry 2013-02-15 20:40:52

5

谢谢您的回答。我只是设置进程同步:

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

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

更多的jQuery的Ajax选项here