Angularjs 取消$http.jsonp将导致javascript错误

Angularjs 取消$http.jsonp将导致javascript错误,angularjs,jsonp,Angularjs,Jsonp,我使用的是Angular版本1.2.1,我试图在初始化相同类型的新请求时在应用程序中实现取消。我使用了代码示例,但无法使其工作。我认为这是因为我使用了$http.jsonp() 当我取消一个jsonp请求时,.then回调永远不会被调用(正如预期的那样),但是请求不会被取消,当响应到来时,我在控制台中得到一个未定义的错误(jsonp回调函数不再存在) 如何避免出现此控制台错误?是否可以取消jsonp请求AllToGeter HTML: 我尝试将angularjs升级到1.2.27版(我应该先尝

我使用的是Angular版本1.2.1,我试图在初始化相同类型的新请求时在应用程序中实现取消。我使用了代码示例,但无法使其工作。我认为这是因为我使用了$http.jsonp()

当我取消一个jsonp请求时,.then回调永远不会被调用(正如预期的那样),但是请求不会被取消,当响应到来时,我在控制台中得到一个未定义的错误(jsonp回调函数不再存在)

如何避免出现此控制台错误?是否可以取消jsonp请求AllToGeter

HTML:


我尝试将angularjs升级到1.2.27版(我应该先尝试一下!),但问题不再存在。在对GitHub进行了一些挖掘之后,我找到了修复方法自1.2.8版以来已修复

修复($httpBackend):取消的JSONP请求不会在控制台中打印错误

当您取消JSONP请求时,angular将删除该请求的回调。但是,脚本仍在执行,并且由于回调现在已被删除且未定义,因此脚本会抛出控制台中可见的异常。对此的快速修复方法不是删除回调,而是将其替换为
angular.noop

关闭#5615

关闭#5616

解决此问题的更改:

-        delete callbacks[callbackId];
+        callbacks[callbackId] = angular.noop;

我想你在这方面真的很在行。。。这应该可以取消JSONP不使用XMLHttpRequest,而是向页面中注入一个标记。您不能中止脚本标记的加载。只要承诺没有得到解决(在我的示例中不是这样),不中止实际请求就可以了。让我感到困扰的是控制台中的javascript错误。我可以提出建议吗?将使您的站点更安全,不受恶意javascript代码的影响。se可以通过``标记注入您的站点。使用CORS,您可以获得进步、真正的流产、超时、安全、状态更改事件作为奖励
var myApp = angular.module('myApp',[]);
function MyCtrl($scope, $q, $http) {
    $scope.status = "Idle";

    $scope.doStuff = function() {
        var canceller = $q.defer();
        $scope.status = "Ongoing";
        $scope.getting = $http.jsonp('http://cruisebookingapi.ving.se/cruisePackage/search/1/STO/141220/false/20141211/42,42/-1?callback=JSON_CALLBACK', {timeout: canceller.promise});
       $scope.getting.then(function(data) {
            $scope.status = "Finished";
            console.log(data);
        });
        $scope.cancel = function() {
            $scope.status = "Cancelled";
            canceller.resolve('Cancel all the things');
        };
    };
}
-        delete callbacks[callbackId];
+        callbacks[callbackId] = angular.noop;