小编典典

如何发出jsonp请求

angularjs

我需要做一些跨站点脚本编写。下面的代码块包含jsonp方法,该方法好像失败了一样返回,但是当我将其更改为get请求时,我就成功了。我需要能够使用jsonp方法获得成功的响应。可以排除以下情况。响应是有效的json,此参数位于url?callback= JSON_CALLBACK中。这是我通过执行http请求和执行此代码的代码块收到的json。

http响应状态码200

[{"cube":"1" ,"points":"160"},{"cube":"2","points":"690"},{"cube":"3","points":"331"}]

代码块

 var myApp = angular.module('test', []);

    myApp.controller('UserCtrl', function($scope, users) {
        $scope.usersPerCube = users.getUsers();
    })

    myApp.factory('users', function($http) {
       return {
         getUsers: function() {
           var deferred = $q.defer();
           var url = "http://localhost/api/api/index.php/analytics/UsersPerCube?callback=JSON_CALLBACK";
         $http.get(url).success(function (data, status, headers, config) {
                console.log(data);
                deferred.resolve(data);
            }).error(function (data, status, headers, config) {
                //this always gets called
                console.log(status);
                deferred.reject(status);
            });
            return deferred.promise;

     }
   }

请注意,我已经编辑了服务器端代码,现在收到

"angular.callbacks._1( {"cube":"1","points":"160"},{"cube":"2","points":"690"},{"cube":"3","points":"331"})"

更新 上面的是有效的,现在成功方法正在执行。我只需要弄清楚如何解析对象。找到答案后,我将再次发布。


阅读 287

收藏
2020-07-04

共1个答案

小编典典

我决定详细说明如何执行jsonp请求,以免其他人遇到与我一样的麻烦。

myApp.factory('users', function($http) {
       return {
         getUsers: function() {
           var deferred = $q.defer();
           var url = "http://localhost/api/api/index.php/analytics/UsersPerCube?callback=JSON_CALLBACK";
         $http.get(url).success(function (data, status, headers, config) {
                console.log(data);
                deferred.resolve(data);
            }).error(function (data, status, headers, config) {
                //this always gets called
                console.log(status);
                deferred.reject(status);
            });
            return deferred.promise;

     }

请注意,该网址包含?callback=JSON_CALLBACK

"angular.callbacks._1( {"cube":"1","points":"160"},{"cube":"2","points":"690"},{"cube":"3","points":"331"})"

[这是关于该主题的一个很好的stackoverflow]

现在让我感到困惑的是,服务器必须返回GET参数callback。这是一个很好的教程。
http://niryariv.wordpress.com/2009/05/05/jsonp-
quickly/所以json看起来像上面的那个。

好吧,我希望这对以后的人有所帮助。

2020-07-04