中止JSONP请求AngularJs

时间:2014-07-14 15:21:23

标签: angularjs

我有以下代码:

    var canceler = $q.defer();
    $http.jsonp(urlWithParams, {
        timeout : canceler.promise
    }).error(function(data, status, headers, config) {
        ...
    }).success(function(data) {
        ...
        }
    });
    canceler.resolve();

请求的错误处理程序被执行但是在Firefox和Chrome的网络日志中都会给出200个响应并返回JSON响应。因此,虽然应用程序的行为类似于请求被中止,但事实上它不是?取消请求时,我预计请求已中止,而不是返回200次成功。

2 个答案:

答案 0 :(得分:1)

你没有做错任何事。

通常,因为http是无状态的,所以一旦请求被发送到服务器,您就不能中止该请求。但是,您可以停止等待并最终忽略最终的响应 - 就像您在这里所做的那样。

除非您觉得错误处理程序不应该被解雇,因为响应成功了?您不会说您是否担心错误失败,或者中止的请求是否收到回复。

答案 1 :(得分:0)

代码canceler.resolve()中的最后一个语句将触发错误。来自angularjs docs:

  

timeout - {number | Promise} - 超时(以毫秒为单位),或承诺在解决时应中止请求。

所以我认为如果你不调用canceler.resolve(),它就不会调用错误函数。