Angularjs Angucomplete Alt:获取;“未找到结果”;在获得服务器响应之前
我试图在输入3个字符后启动请求,但一旦输入3个字符,我将收到“未找到记录”错误,之后我可以找到“服务调用已完成”,但“自动完成”中未显示任何内容(仅在“自动完成”下拉列表下显示错误消息)。我缺少什么 HTML代码:Angularjs Angucomplete Alt:获取;“未找到结果”;在获得服务器响应之前,angularjs,autocomplete,Angularjs,Autocomplete,我试图在输入3个字符后启动请求,但一旦输入3个字符,我将收到“未找到记录”错误,之后我可以找到“服务调用已完成”,但“自动完成”中未显示任何内容(仅在“自动完成”下拉列表下显示错误消息)。我缺少什么 HTML代码: <angucomplete-alt id="angu_{{$index}}" placeholder="Search people"
<angucomplete-alt id="angu_{{$index}}"
placeholder="Search people"
remote-api-handler="search"
remote-url-data-field="results"
title-field="fullName"
minlength="3"
input-class="form-control form-control-small"
selected-object="selected"
selected-object-data="$index"
clear-selected="true"/>
尝试了相同的另一个版本:
<angucomplete-alt id="angu_{{$index}}"
placeholder="Search people"
selected-object="selectedBusiness"
selected-object-data="$index"
clear-selected="true"
input-class="form-control
form-control-small"
remote-api-handler="searchAPI"
remote-url-data-field="responseData.data"
title-field="fullName" minlength="3" />
$scope.searchAPI = function (userInputString, timeoutPromise) {
$scope.approversAndEndorsersInput = {};
return $timeout(function () {
$scope.approversAndEndorsersInput.userId = "";
$scope.approversAndEndorsersInput.name = userInputString;
$scope.approversAndEndorsersInput.system = "";
$scope.approversAndEndorsersInput.officeNumber = "";
$scope.approversAndEndorsersInput.department= "";
return $http.post(appConstant.selfDomainName+appConstant.getApproversAndEndorsersList, JSON.stringify($scope.approversAndEndorsersInput), {timeout: timeoutPromise});
}, 1000);
$scope.searchAPI=函数(userInputString,timeoutPromise){
$scope.approversandorsersinput={};
返回$timeout(函数(){
$scope.approversandorsersinput.userId=“”;
$scope.ApproverSandersInput.name=userInputString;
$scope.approversandorsersinput.system=“”;
$scope.approversandorserInput.officeNumber=“”;
$scope.approversandorsersinput.department=“”;
返回$http.post(appConstant.selfDomainName+appConstant.GetApproverSandersList,JSON.stringify($scope.ApproverSandersInput),{timeout:timeoutPromise});
}, 1000);
}根据我在您的代码和文档中看到的情况,我认为问题在于您在
searchAPI
函数中立即返回了$timeout
的承诺,一旦达到超时,该函数就会自行解决。这就是为什么您将看到返回“未找到记录”,然后调用API的原因。相反,直接返回$http
promise对象。i、 e:
$scope.searchAPI = function(userInputString, timeoutPromise)
{
// do some other stuff, stringify data, build url_endpoint
return $http.post(url_endpoint, json_data, {timeout: timeoutPromise});
}
$http
承诺只有在您的API被使用后才能解决。第一个示例
在第一个示例中,您从未返回承诺
var promise = genericAPIService.doApiCall(url, appConstant.POST, ...
因此,$timeout永远不会通过API的响应得到解决在$timeout回调结束时返回
承诺
第二个例子
您似乎没有正确设置远程url数据字段
这是我使用第二个示例附带的一个plunker,它工作正常,我稍微修改了searchAPI
方法以显示最后一个http响应
当我错误地配置了远程url数据字段时
,做出了响应,但结果显示为“未找到结果”
请参阅plunk上的注释,并尝试以适合您的方式对其进行配置
如果无法绑定正确的属性,请提供api中的响应示例,我们可以找到解决方案
使用$timeout
使用$timeout
添加延迟的原因并不明显,在两个示例中都是这样做的。它所做的唯一一件事就是人为地增加给定时间量的延迟。如果原因是向触发API请求的输入字段添加一些去抖动/延迟,那么这并不会减少它
有一个pause
属性,它可以配置以毫秒为单位的延迟,以确保在用户停止键入的这段时间之后调用api。
您可以在plunker演示中看到,默认值为500
由于您的自定义服务和$http(来自第二个示例)都返回承诺,您可以直接返回它们的结果我能够解决问题。PFB帮助解决问题的链接
当
errorPayload
处理程序无法重新抛出错误时,您使用genericAPIService
命中的REST端点是什么。然后执行链中的块。重新抛出错误以跳过后续的。然后块是很重要的。@georgeawg:它根本没有进入错误处理程序。在服务调用结束之前执行Angu complete指令。。。。因为没有找到任何记录。。。这就是我想的…@bowofola:endpoint正在提供数据。。点击url后。。或者应该以其他方式给出?很难重现你看到的问题。什么是alt
?您创建的第三方库或指令?您看到下面答案中的plunk了吗?这里描述了这一点以及如何配置alt指令,并且从您的问题中复制了方法,只更改了api调用
var promise = genericAPIService.doApiCall(url, appConstant.POST, ...