在休息呼叫angularjs内进行休息呼叫

时间:2016-02-18 19:19:53

标签: javascript angularjs rest

我正在尝试进行REST调用,以根据文本框中输入的文本获取城市的总数。 我第二次进行相同的REST调用,以获得相同搜索文本的25条记录。 例如,如果我输入文本Paris,则第一个休息呼叫将maxPage大小设置为1000并获取所有记录。 第二次,maxPage设置为25以获得前25个记录。

这个想法是显示与搜索文本匹配的记录总数,并显示前25个记录。 (例如:25/400)

我面临的问题是在我输入文本时,第一个休息呼叫仅占用文本的一部分,第二个呼叫占用整个文本。 为文本返回的计数与第二个呼叫的响应不匹配。

例如:第一个电话以“Par”文字结尾,得到250个结果,第二个电话正在“巴黎”。我最终得到25/250,这是不正确的。 可能是因为一些时间问题,因为searchCities被调用ng-change。我无法在屏幕上引入按钮,因此只需要进行ng-change。 请帮我解决这个问题。

请查看以下代码。

$scope.getCityCount = function(phrase){
var searchPhrase = phrase;
var dataObj =  { term: searchPhrase, maxPage: 1000, pagefrom: 0 };
var srchdata = JSON.stringify( dataObj );
Cities.query( {}, srchdata, function(cityData) { //1st REST call
    if (cityData.status == "success") {
        $scope.cityCount= cityData.data.length; //total records

        $scope.loadMoreCities(searchPhrase); //2nd call:to get 25 records
    }
});
}

$scope.loadMoreCities = function(phrase){
    var searchParam = { term: phrase, maxPage: 25, pagefrom: 0 };
    Cities.query( {}, searchParam, function(dataObj) {
        if (dataObj.status == "success") {
            var citiesFound = dataObj.data;
        }
    });
}

$scope.searchCities = function( phrase ) {
    if(phrase.length > 1){
        $scope.getCityCount(phrase);
    }
}

修改: 虽然我正在寻找巴黎,但我正在获得Pa的最终结果。请参阅日志::

getSearchCount#1: {"searchTerm":"Paris","maxPage":10000,"pagefrom":0}is=====400
 getSearchCount#2: {"searchTerm":"Paris","maxPage":25,"pagefrom":0}is===== 25
 getSearchCount#1: {"searchTerm":"Pari","maxPage":10000,"pagefrom":0}is===== 105
 getSearchCount#2: {"searchTerm":"Pari","maxPage":25,"pagefrom":0}is===== 25
 getSearchCount#1: {"searchTerm":"Pa","maxPage":10000,"pagefrom":0}is===== 722
 getSearchCount#2: {"searchTerm":"Pa","maxPage":25,"pagefrom":0}is===== 25

在屏幕上我得到25/722

HTML:

<input type="text" ng-model="phrase" ng-change="searchCities(phrase)">

1 个答案:

答案 0 :(得分:1)

这是一个非常糟糕的主意。你应该做服务器端分页。让API返回寻呼机对象以及搜索结果。例如,这是一个API GET请求:

  

/ API /帐户SEARCHTEXT = someText&安培;?的pageSize = 25&安培;页= 1

以下是回复:

{
  "pager": {
    "pageCount": 1,
    "totalItemCount": 342,
    "pageNumber": 1,
    "pageSize": 25,
    "hasPreviousPage": false,
    "hasNextPage": true,
    "isFirstPage": true,
    "isLastPage": false,
    "firstItemOnPage": 1,
    "lastItemOnPage": 25
  },
  "results": [
    {
      "id": 15343,
      "name": "Account Name",
    },
    // more accounts returned here...
    {
      "id": 2314,
      "name": "Account Name 2",
    }
  ],
  "searchText": "someText"
}

当客户想要加载更多时,请求将更改为:

  

/ API /帐户SEARCHTEXT = someText&安培;?的pageSize = 25&安培;页= 2

..你看到我们正在尝试获取第二页。

如何实现服务器端分页是另一个问题。这是一个基本的服务器side paging example,可以给你一个想法。

<强>更新

如果绝对无法更改api以提供寻呼信息,请尝试使用去抖动延迟。您可以在documentation中阅读它,但它实际上会在计时器到期而不是按键时触发ng-change更新。以下是如何实现它。

<input type="text" ng-model="phrase" ng-model-options='{ debounce: 1000 }' ng-change="searchCities(phrase)">