我正在尝试进行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
<input type="text" ng-model="phrase" ng-change="searchCities(phrase)">
答案 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)">