2009-06-14 62 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