【问题标题】:jQuery Mobile load new data onlyjQuery Mobile 仅加载新数据
【发布时间】:2014-11-19 07:26:59
【问题描述】:

出于学习目的,我正在开发这个项目。现在的任务很简单:

  1. 使用$.getJSONDB填充数据。
  2. 每隔'n' 秒检查一次新数据,然后append 将其添加到列表中。
  3. 通知用户新的数据更改。

这是我到目前为止的示例:(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();
});

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    您的数据比较不正确。

    你正在考虑这个:

    <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( "" ) );  
    }
    

    这里是编辑后的 ​​sn-p:JSBin

    【讨论】:

    • 很好,但似乎setTimeout(loadList,1000); 仍然没有加载新数据。我在我的json 文件中添加了新数据,希望它会通知我,但没有运气。这可能是什么原因?
    • 我刚刚又测试了一遍,似乎一切正常。您不会忘记将新的数据 id 更改为唯一的,对吧?
    • 是的,具有唯一 ID 的新数据。我在 JSbin 和 IntelXDK 中都试过了。
    • 请提供您正在尝试的两个 JSBin 链接 - 脚本和 json。
    • 我在local 上对其进行了测试,并且成功了。太棒了:) 如果我想把它提升到更复杂的水平怎么办?能够通知任何data.field 的任何更改。例如:{"id":"9","name":"Boris"} 改为{"id":"9","name":"Peter"} ?
    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2014-06-24
    • 2013-06-12
    • 2012-03-14
    相关资源
    最近更新 更多