使用angularjs中的jsonp请求进行异常处理

时间:2013-07-20 23:54:48

标签: angularjs jsonp

我有以下代码,它们对jsonp数据进行单独请求。 在代码“doRequestA”工作正常并返回结果。我遇到的问题是 如果它们发生,我需要捕获任何错误。我试过实现这个 “doRequestB”,但只收到警报错误(我已经省略了来自doRequestB的回调)。

这是小提琴http://jsfiddle.net/a4Rc2/417/

function jsonp_callback(data) {
    alert(data.found);
}

function jsonp_example($scope, $http) {
    $scope.doRequestA = function () {
        var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=jsonp_callback";
        $http.jsonp(url);
    };

    $scope.doRequestB = function () {
        var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts";
        $http.jsonp(url)
            .success(function (data) {
            alert(data.found);
        }).error(function (data, status, headers, config) {
            alert('error');
        });
    };
}

非常感谢任何建议,谢谢。

1 个答案:

答案 0 :(得分:3)

在这两种情况下,您实际上都错误地使用$http.jsonp。你只是在第一种情况下看不到错误,因为你没有处理它。

使用Angular.js的$http.jsonp方法,自动处理回调方法。您不应该在结果字符串中使用自己的方法,而是将JSON_CALLBACK(完全按照书面形式)插入到字符串中。这样,您可以使用Angular返回的promise来处理响应。如果您观看网络活动(例如,在您选择的浏览器中使用Firebug或开发人员工具),您会看到JSON_CALLBACK替换为angular.callbacks._0 * 。< / p>

在第二个示例中,您根本没有定义回调方法,因此结果将始终错误。实际上没有办法处理jsonp结果,因为它只返回没有回调方法的JSON对象,结果只是被忽略。

以下是工作结果:http://jsfiddle.net/tPLaN/1/

代码:

function jsonp_callback(data) {

    alert(data.found);
}


function jsonp_example($scope, $http) {
    $scope.doRequestA = function() {

        var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK";

        $http.jsonp(url).success(function(data) {
            jsonp_callback(data);
        });
    };   


    $scope.doRequestB = function() {

        var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK";


        $http.jsonp(url)               
         .success(function (data) {

             alert(data.found);

        }).error(function (data, status, headers, config) {

             alert('error');         
        });
    };       
}

我唯一改变的是

  1. 更正这两个网址。
  2. 在promise上的.success()方法内的第一个方法上移动回调处理程序。
  3. 信不信由你,the documentation for $http.jsonp中对JSON_CALLBACK 的需求是,但它有点隐藏。


    * 注意,请不要使用JSON_CALLBACK的替代品。这是一个由Angular生成的私有方法,我只是展示它以帮助更好地了解正在发生的事情。

相关问题