Javascript 如何发出jsonp请求

Javascript 如何发出jsonp请求,javascript,json,angularjs,Javascript,Json,Angularjs,我需要做一些跨站点脚本。下面的代码块包含jsonp方法,该方法返回时好像失败了一样,但当我将其更改为get请求时,我就成功了。我需要能够使用jsonp方法获得成功的响应。以下情况可以排除。响应是有效的json,此参数位于url?callback=json\u callback中。下面是我从http请求中收到的json和执行此代码的代码块 http响应状态代码200 [{"cube":"1" ,"points":"160"},{"cube":"2","points":"690"},{"cube":

我需要做一些跨站点脚本。下面的代码块包含jsonp方法,该方法返回时好像失败了一样,但当我将其更改为get请求时,我就成功了。我需要能够使用jsonp方法获得成功的响应。以下情况可以排除。响应是有效的json,此参数位于url?callback=json\u 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"})"
更新
以上内容有效,现在正在执行success方法。我只需要弄清楚如何解析这些对象。一旦我找到答案,我会再发一次。

我已经决定详细描述如何处理请求,这样其他人就不会遇到和我一样的麻烦

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;

     }  
请注意,url包含
?callback=JSON\u callback
。一旦得到响应,您将收到一个json,如下所示

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

现在让我明白的是服务器必须返回
GET
参数,
回调
。这里有一个很好的教程。因此,json看起来与上面的一样


嗯,我希望这对将来的人有所帮助。

如果你想通过$http服务发出几个JSONP请求,你应该使用一些技巧。Agular将JSON_回调更改为内部值,使用下一个解决方案的最佳方法是:将此js代码放入返回的js文件中:

var callbackId = '_' + (angular.callbacks.counter - 1).toString(36);
angular.callbacks[callbackId](/* YOUR JSON */);

为确保此代码适用于您,请检查angular sources中的createHttpBackend方法。

您请求的服务器是否理解JSONP(特别是
回调
查询字符串值)?如果您的响应是有效的JSON,则它是无效的JSONP。JSONP是用函数包装的JSON数据。说到@Alxandr,你确定你要找回JSONP吗?我有这个堆栈溢出所建议的一切,使它在服务器端成为有效的JSONP。也可以使用angular.callbacks._1进行角度响应,这意味着它将其识别为jsonp。我只是不确定现在应该如何处理回复。您的回复内容类型是什么?我有一个小问题,浏览器无法显示响应,因为它强制下载它。响应内容类型为“application/jsonp”,有没有理由不使用
$http.jsonp()
并手动创建承诺,因为前者已经返回了承诺?