中止JSONP请求AngularJs

中止JSONP请求AngularJs,angularjs,Angularjs,我有以下代码: var canceler = $q.defer(); $http.jsonp(urlWithParams, { timeout : canceler.promise }).error(function(data, status, headers, config) { ... }).success(function(data) { ... } }); canceler.r

我有以下代码:

    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次成功。

您没有做错任何事

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


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

代码取消程序.resolve()中的最终语句将触发错误。从angularjs文档:

超时–{number | Promise}–以毫秒为单位的超时,或在解析时应中止请求的承诺


因此,我认为如果不调用canceler.resolve(),它将不会调用error函数。

谢谢。我确实希望触发错误处理程序,但是在查看请求时,我没有预料到200响应。以前使用jQuery中止ajax请求时,请求状态更改为已取消,而不是返回响应。jQuery还需要状态响应。你可能在别的地方有个bug。url中是否有callback=JSON\u callback?实际上,该回调存在于url中,该url被转换为&callback=angular.callbacks.\u例如0。