angular ajax请求超时,AngularJS:使用超时属性取消$ http请求

我已经看过很多很多关于此主题的帖子和大量的网络文章,但我仍然难以解决我的问题。我发现this post非常有用,但我的timeoutRequest()函数永远不会被调用。

我正在使用$ http的timeout属性的承诺,但底层的HTTP请求未被取消。我认为承诺本身正在得到解决,但请求并未取消。

我的控制器的行为看起来是这样的:

$scope.enquiriesSelected = function() {

$scope.cancelHttpRequests();

$location.path("/enquiries");

};

$scope.cancelHttpRequests = function() {

console.log(canceller.promise.$$state);

canceller.resolve("User cancelled");

console.log(canceller.promise.$$state);

};

我的HTTP请求,承诺如下:

var canceller = $q.defer();

$scope.searchResultsPromise = $http({

url: "/api/customers/customersearch",

method: "POST",

data: criteria,

timeout: canceller.promise

})

.success(function(data) {

$scope.customerSearchResults = data;

});

我已经尝试了各种方法来得到这个工作,包括把消除在$范围。

我一直在寻找通过AngularJS源代码,我发现这些行:

if (timeout > 0) {

var timeoutId = $browserDefer(timeoutRequest, timeout);

} else if (isPromiseLike(timeout)) {

timeout.then(timeoutRequest);

}

function timeoutRequest() {

jsonpDone && jsonpDone();

xhr && xhr.abort();

}

然而,当我的承诺,解决执行路径没有达到这些行。 xhr.abort()永远不会被调用,这是AngularJS源代码中放弃HTTP请求的唯一地方。

尝试取消请求时,使用F12(Chrome)中的控制台进行检查显示承诺的$$状态从0更改为1,因此我相当确信承诺正在解决。但是,在网络流量中,HTTP请求未被取消。在HTTP请求完成之前,我无法导航到其他页面。

任何人都可以帮忙吗?

中号

+0

如果您的请求花费很长时间,我可能会在服务器端创建一个布尔值,表示数据已加载/准备就绪,并且如果布尔值为true,则可以检查每一秒,然后获取数据。这里有两个优点:用户可以取消定时器,并避免检查数据准备好,浏览器不会挂起。 –

+0

我不能那样做,我害怕。我打电话给我没有源代码的服务。 –

+0

为什么您将承诺保存到$ scope.searchResultsPromise?如果你删除它,这有帮助吗? –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值