2013-02-14 33 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