如何在AngularJS中停止所有正在进行的Ajax调用?
How do I stop all ongoing Ajax calls in AngularJS
我正在制作Ajax调用API由文本输入元素中的ng-change
事件触发。
HTML:
<input type="text" ng-model="movieTitle" ng-change="writeTitle(movieTitle)">
Javascript: $scope.writeTitle = function(val){
val = val.replace(/ /g, "+");
var ajax_url = 'http://www.omdbapi.com/?s='+val+'*';
$http.get(ajax_url).success(function(data) {
$scope.movies = data.Search;
});
}
我想做的是,如果有人快速连续键入4个字符,只解析最后的Ajax调用;否则,它们有时会混淆,用户看到的是另一个呼叫的结果,而不是最后一个呼叫的结果。
那么,当一个新调用被执行而其他调用仍在队列中时,我如何停止正在进行的Ajax调用呢?
您需要延迟ng-change
的发射。为此你需要使用debounce
。
用法请参考以下链接:
Angular ng-change delay
这样做的方法是限制调用函数的频率,而不是通过停止进一步的ajax调用本身。
两个常见的术语是throttling
或debouncing
,并在此博客上有一个H/T
Throttling -强制一个函数在一段时间内可以调用的最大次数。如"每100毫秒最多执行此函数一次"。
debouting -强制函数在经过一定时间后才被调用。
您可以选择更适合您的情况,并在您的函数中实现它。
Debounce
和throttling
的东西是适合的。如果你想取消正在进行的请求,因为某些原因,你需要使用$http.get
调用的超时参数。
相关文章:
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 当用户停止键入时进行Ajax搜索
- 如何清除正在进行的所有JQuery
- 无法在Windows 10 Cordova应用程序中从Web视图进行ajax调用
- 在Knockout中进行ajax调用后,ViewModel不会更新
- 在 Django 中使用 JavaScript 进行 Ajax 调用
- 正在检查ajax响应中的错误数据
- 如何进行AJAX调用,使其仅在我单击包含在特定类中的链接时触发;id”;父元素的
- 正在拆分AJAX POST变量
- 终止所有正在进行的XHR请求
- 如何避免$digest正在进行中的错误
- 我正在尝试进行ajax发布调用,但请求不会发送到控制器
- 正在进行中的 Ajax 请求突然开始返回状态 = 0
- 如何停止数据表实例已启动的所有当前正在进行的 Ajax 查询
- 如果正在进行相同的请求,则跳过AJAX函数
- jQuery .load不工作,而ajax查询正在进行中
- 如何跟踪正在进行的ajax请求
- 显示& # 39;加载# 39;图像,当AJAX调用正在进行时
- 如何在AngularJS中停止所有正在进行的Ajax调用?
- 当旧的ajax请求正在进行时,阻止新的ajax请求