当前位置: 首页 > 面试题库 >

如何发出jsonp请求

松思源
2023-03-14
问题内容

我需要做一些跨站点脚本编写。下面的代码块包含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"})"

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


问题答案:

我决定详细说明如何执行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看起来像上面的那个。

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



 类似资料:
  • 问题内容: 我需要发出内容类型为“ application / json”的jsonp POST请求。我可以这样向服务器发送POST请求: 但是,只要我添加了这一行:它就开始作为OPTIONS请求而不是POST发送。 如何指定内容类型并仍然以POST形式提交请求? 问题答案: 无法发出JSONP POST请求。 JSONP的工作原理是创建一个标签,该标签从另一个域执行Javascript;无法使用

  • 由于集群环境中的跨域问题,我试图使用jsonp数据类型执行ajax请求。 我可以将jsonp请求映射到没有@刚体参数的方法,但是当我尝试用@刚体参数实现一个请求映射时,我会得到一个415不支持的媒体类型错误。 通常,当我遇到这个问题时,是由于一些属性在发布的json对象和它在Spring中映射到的Java对象之间没有正确映射。但我能找到的唯一区别是,使用jsonp它添加了一个名为callback的

  • 问题内容: 我读了一些将jsons发布到服务器的示例。 有人说: OkHttp是Java提供的HttpUrlConnection接口的实现。它提供用于编写​​内容的输入流,并且不知道(或不在乎)内容的格式。 现在,我想用名称和密码的参数对URL进行常规发布。 这意味着我需要自己将名称和值对编码为流? 问题答案: 当前接受的答案已过期。现在,如果您想创建一个发布请求并向其中添加参数,则应该使用Mul

  • 问题内容: 我在iBooks中阅读了Apple的The Programming Language Swift ,但无法弄清楚如何在Swift中发出HTTP请求(例如cURL)。我需要导入Obj- C类还是只需要导入默认库?还是无法基于本机Swift代码发出HTTP请求? 问题答案: 您可以使用,而且还是因为你通常在Objective- C做。请注意,对于iOS 7.0和更高版本,它是首选。 使用

  • 我一直在读《理解Apex测试》。在题为“理解测试数据”的一节中,有一句话如下 如果测试发出Visualforce请求,则正在执行的测试将保留在测试上下文中,但在不同的线程中运行,因此不再强制执行测试数据隔离。 这很有趣,我想写一个测试类来说明这个概念,但是我对句子的第一个子句感到困惑:“如果测试发出Visualforce请求......”。一个人是如何做到的?

  • 我在iBooks上读过Apple的编程语言Swift,但不知道如何在Swift中发出HTTP请求(类似于cURL)。我需要导入Obj-C类还是只需要导入默认库?或者不可能基于本机Swift代码发出HTTP请求?