jQuery Mobile仅加载新数据

时间:2014-11-19 07:27:00

标签: javascript jquery refresh settimeout jquery-mobile-listview

我正在研究这个项目用于学习目的。现在的任务非常简单:

  1. 使用$.getJSON
  2. 数据库填充数据。
  3. 每隔'n'秒检查一次新数据,并将append检查到列表中。
  4. 通知用户有关新数据的更改。
  5. 以下是我到目前为止的示例:(JSBin /不要忘记运行js ) 运行示例时,所有问题都将显示出来。

    以下是 JS 代码:

    $(document).bind('pageinit', function(){
    
        var $myList = $( "#myList" );
        var newItems = [];
    
      function loadList(){  
      $.getJSON("http://jsbin.com/vayeni/2.js",function(data){
    
       $.each(data, function( index, value ) {
    
         newItems.push( "<li><a>" + value.airline + "</a></li>" );
               if(data>newItems){
                alert('New Entry');
                data=newItems;
          }
       });
            $myList.append( newItems.join( "" ) );
            $myList.listview( "refresh" );
            setTimeout(loadList,1000);
      });
      }
        loadList();
    });
    

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您的数据比较不正确。

你正在考虑这个:

<li><a>JetBlue</a></li>
<li><a>Continental</a></li>
...

到此:

  {
    "id": "1",
    "airline": "JetBlue",
    "number": "222",
    "people": "3",
    "time": "12:20"
  },
  {
    "id": "2",
    "airline": "Continental",
    "number": "222",
    "people": "5",
    "time": "23:21"
  },

总会存在不平等。

你应该使用另一种方法。例如,如果JSON数组中的id字段是唯一的,则可以将其作为id属性附加到无序列表中的每个项目。例如:

newItems.push( "<li id=\"" + value.id + "\"><a>" + value.airline + "</a></li>" );

这样,在每次迭代时,您都可以检查列出的JSON项是否已经存在于列表中,并在没有匹配时添加它。例如:

if (!$myList.find('#' + value.id).length) {
  newItems.push( "<li id=\" + value.id + \"><a>" + value.airline + "</a></li>" );
}

最后,如果内部有项目,您可以直接附加newItems内容:

if (newItems.length > 0) {
  $myList.append( newItems.join( "" ) );  
}

以下是已修改的代码段:JSBin