是否有可能取消微风请求(AngularJS)
Is it possible to cancel Breeze requests (AngularJS)?
我正试图找到一种方法来取消BreezeJS查询,以便实现在按键上查询BreezeJS的实时搜索(参见我的其他问题)。
我知道在Angular中,$http
请求可以通过向config
对象中的timeout
参数传递一个承诺来取消,然后在该承诺上调用resolve()
。
我也知道我可以让BreezeJS使用我的模块的$http
实例:
var ajax = breeze.config.initializeAdapterInstance('ajax', 'angular');
ajax.setHttp($http);
所以我在考虑可能在$http
上创建一个request
拦截器,将config.timeout
设置为承诺。但这仍然让我离解决问题有几步之遥,因为我不知何故需要能够从运行查询的代码中向我的拦截器提供承诺(以便查询代码可以在需要时resolve()
承诺)。
有更好的方法吗?这可能吗?
2014年5月16日更新
您可以使用AJAX适配器的requestInterceptor
设置http级超时和取消。请参阅文档"控制AJAX调用"。
EntityManager HTTP服务操作不提供取消或超时选项。也许有一天他们会的。
v.1.4.11 Breeze AJAX适配器也不提供取消或超时选项。但是他们会在v.1.4.12,你现在可以在github上看到预览。
github上的示例说明了使用新适配器的cancel和timeout。对于jQuery AJAX组件的用户,有DocCode:jQueryAjaxAdapterTests.js。对于使用Angular $http
的用户,有Zza-Node-Mongo:ajax-adapter.async.spec.js.
最好能运行这些示例,但如果不能(可能是因为没有使用所涉及的技术之一),测试文件(参见上面的链接)很容易阅读,您应该收集对您有帮助的想法。至少我希望如此。
使用Cancel和timeout是有用的特性。您的用例需要它们吗?也许吧。但是,你可能想要迈出第一步,消除用户输入"实时搜索"的文本的反弹。这样你就不会发出上百个毫无意义的查询了。
该观察结果在您的相关StackOverflow问题中讨论。
标题>- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- Angularjs http.get() Cross-Origin 请求被阻止
- 飞行前响应中的访问控制允许标头不允许Angularjs请求标头字段访问控制允许标题
- 在点击AngularJS时发出新的AJAX请求
- 从输入中获取字符串,并在AngularJS中发出AJAX请求
- AngularJS Typeahead和$http请求限制
- 如何在Angularjs中模拟HTML表单请求
- AngularJS错误:请求的键的值不是对象.keys@[本地代码]
- angularjs在CMS的url中获取请求
- 如何在AngularJS中取消挂起的请求
- 如果需要登录,Angularjs$http拦截器会暂停异步请求
- AngularJS $http GET 请求到本地 JSON 文件返回语法错误:意外令牌]
- IE 10 挂起 XMLHttpRequest 6 分钟,然后响应请求(使用 AngularJS 实现 CRSF)
- AngularJs 错误:$http请求虽然在控制器中定义
- Angularjs的异步API请求
- AngularJS请求模型在另一个模型创建[NodeJS]之前
- 为什么AngularJS请求拦截器中不提供所有请求头's配置参数
- Javascript/ AngularJS请求用户下载iOS/ Android应用
- Angularjs:请求数据之前的一个条件
- PHP Header()在响应AngularJS请求时不管if语句如何发送