2013-02-14 61 views
-1

我正在用json填寫一個列表。然而,json(php文件)給了我X秒後的結果(未知時間)。如何在X秒後使用'到達'的json數據?

外部文件 - 獲取JSON數據:

$(function(){ 
       // can't modify this file 
       $.getJSON('json.php', 
        function(data) {    
        items = []; 
        $.each(data, function(key, val) { 
          items.push('<li id="' + key + '">' + val + '</li>'); 
        }); 
       }); 
    }); 

內嵌代碼 - 輸出:

<script> 
$(function(){ 
       $('<ul/>', { 
         'class': 'my-new-list', 
         html: items.join('') 
       }).appendTo('#result'); 
     }); 
</script> 

現在我什麼也看不到在#result因爲這兩個代碼同時使被加載輸出找不到'項目'。

如何修改內聯代碼以迫使它等到外部文件爲我提供json數據?也許是觀察員?

編輯:它看起來像我沒有解釋得很好。我很抱歉我的英語不好。我也是Js/Jquery新手。編輯2:如果我們沒有延遲獲取JSON數據一切正常,但它取決於通過串行通信連接的一些外部設備,有時需要2,3或5秒才能獲得JSON。

+1

它找不到'items',因爲這個變量在另一個範圍中定義。 – dfsq 2013-02-14 20:18:20

+1

如果你不能修改第一個文件,你期望如何獲得'items'?時機似乎無關緊要。 – 2013-02-14 20:18:23

+0

感謝您的有用評論。不幸的是我(仍然)是一個新手。 – Shaz 2013-02-14 20:33:59

回答

2

看起來你的唯一選擇是使用setInterval定期檢查數據是否可用。理想的方式需要修改文件1.

function handleData(items) { 
    // dostuff with items 
} 

var itemsInterval = setInterval(function(){ 
    if (items && items.length) { 
     handleData(items); 
     clearInterval(itemsInterval); 
    } 
},250); 
+0

我剛剛編輯了這個問題以澄清,因爲它在沒有延遲的情況下工作。謝謝! – Shaz 2013-02-14 20:49:08

+0

@Shaz如果您的代碼在延遲很小的情況下工作,那意味着file1不像您在問題中發佈的那樣。現在,你所說的工作是不可能的。 'var items ='可能只是'items =' – 2013-02-14 20:52:39

+0

感謝您更新您的答案。我很感激。 – Shaz 2013-02-14 21:54:36