javascript - 将 AJAX 调用获取的数据附加到现有列表以进行延迟加载

标签 javascript html angularjs ajax

我对 UI 开发还很陌生,所以请耐心等待。我正在尝试在网页上实现延迟加载。也就是说,当用户滚动到页面底部时,将使用 AJAX 调用从服务器获取页面。想要做的是将新数据附加到已经存在的数据中。目前,新数据占据了整个 ListView ,并且滚动条移至顶部。这是我的代码:

AJAX 调用:

$scope.getMoreData=function(){
      updateAjaxData();
      var url=$scope.getURL();
      A.ajax(url, {
          method: 'post',
          params: AJAX_DATA,
          success: function(data, s, x) {
              $scope.providersList = JSON.parse(data.serviceproviderlist);
              $scope.serviceName = data.category;
              $scope.limit = SEARCH_LIMIT;
              $scope.$apply();
              var div = document.getElementById("spn-service-provider-list");
              var content = document.createTextNode($scope.providersList);
              div.appendChild(content);
          },
          error: function(xhr, statusText, errorThrown) {
              $scope.errorCallback(xhr);
          }
     });
  }

这是我的 HTML:

<div id="spn-service-provider-list">
    <div class="spnsearch">
        <i class="spnicon spn-icon-search"></i> 
                <input type="search" ng-model="spsearch" id="spsearch" placeholder="Search Providers" name="spsearch">
    </div>
    <div id="spn-list" style="height:100vh;overflow-y:scroll;" when-scrolled="showMoreItems(filteredproducts.length,limit)">
            <div ng-repeat="providersList in ( filteredproducts = ( providersList | filter:{ providerName: spsearch } | filter:{ citiesServicing: locationsearch }:ignoreNullComparator ))  | orderBy: 'rank' | limitTo: limit " >
            ...................
            ...................

问题在于,当使用 AJAX 调用获取新页面时,它会占用整个 ListView 。也就是说,旧列表完全消失,新列表占据其位置,滚动条移至顶部。 此外,成功附加到我的列表的是几个 [object]

这是建议的代码,仍然没有改变:

success: function(data, s, x) {
              if($scope.providersList === null) {
                $scope.providersList = []; /* init if null */
              }
              /* Update the existing array */
              Array.prototype.push.apply($scope.providersList, JSON.parse(data.serviceproviderlist));
              $scope.serviceName = data.category;
              $scope.limit = SEARCH_LIMIT;
              $scope.$apply();
              viewToBeDisplayed(LIST_VIEW);
          },

最佳答案

因为你删除了现有的数组。
所以替换

$scope.providersList = JSON.parse(data.serviceproviderlist);

if($scope.providersList == null) {
  $scope.providersList = []; /* init if null */
}
/* Update the existing array */
Array.prototype.push.apply($scope.providersList, JSON.parse(data.serviceproviderlist));

关于javascript - 将 AJAX 调用获取的数据附加到现有列表以进行延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45733783/

相关文章:

javascript - 与背景图片一起定位时链接不起作用?

html - CSS 阻止列表在列之间拆分

javascript - 使用服务在 Controller 之间共享数据 (AngularJS)

javascript - 以 Angular 创建一个新对象

JavaScript 'beforeunload' 事件在 ie 中不起作用

javascript - Rails link_to 与 ajax 远程 true 不更新 View

javascript - 在 AJAX 中动态生成 HTML 行

javascript - 由于套接字 io 不存在导致测试失败

javascript - d3.js 直方图不显示列

javascript - JQuery 忙碌指示器不会禁用键盘事件