How to make a jsonp request

前端 未结 2 1263
有刺的猬
有刺的猬 2020-11-28 10:47

I need to do some cross site scripting. The block of code below contains the method of jsonp, the method returns as if it failed, but when I change it to be a get request I

相关标签:
2条回答
  • 2020-11-28 11:26

    I have decided to give a detailed description of how to do a jsonp request so others will not run into the same troubles as I did.

    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;
    
         }  
    

    Notice that the url contains ?callback=JSON_CALLBACK. Here is a nice stackoverflow on that. Once you get the response then you'll receive a json like the one below.

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

    Here is a nice stackoverflow on that subject

    Now the one part that got me is that the server has to return the GET param, callback. Here is a good tutorial for that. http://niryariv.wordpress.com/2009/05/05/jsonp-quickly/ So the json looks like the one above.

    Well, I hope this helps someone in the future.

    0 讨论(0)
  • 2020-11-28 11:29

    If you want to make several JSONP requests through $http service, you should use a little hack. Agular change JSON_CALLBACK to internal value, and best way to use next solution: put this js code into your returned js-file:

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

    To be sure that this code will work for you, please check createHttpBackend method in angular sources.

    0 讨论(0)
提交回复
热议问题