AngularJS: como fazer um pedido de jsonp

Eu preciso fazer alguns scripts entre sites. O bloco de código abaixo contém o método de jsonp, o método retorna como se ele falhasse, mas quando eu o altero para ser um pedido get, eu tenho sucesso. Eu preciso ser capaz de uma resposta bem sucedida usando o método jsonp. O seguinte pode ser descartado. A resposta é json válida e esse parâmetro está na url? Callback = JSON_CALLBACK. Aqui está o json que recebo ao fazer o pedido http e o bloco de código que executa este código.

código de status de resposta http 200

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

bloco de código

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

Note que eu editei o meu código do lado do servidor e agora recebo

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

ATUALIZAÇÃO O acima é válido e agora o método de sucesso está sendo executado. Eu só preciso descobrir como analisar os objects. Vou postar novamente assim que descobrir a resposta.

Decidi dar uma descrição detalhada de como fazer um pedido de jsonp para que os outros não tenham os mesmos problemas que eu.

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

Observe que o URL contém ?callback=JSON_CALLBACK . Aqui está um bom stackoverflow sobre isso. Depois de obter a resposta, você receberá um json como o abaixo.

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

Aqui está um bom stackoverflow sobre esse assunto

Agora a única parte que me pegou é que o servidor tem que retornar o parâmetro GET , callback . Aqui está um bom tutorial para isso. http://niryariv.wordpress.com/2009/05/05/jsonp-quickly/ Assim, o json se parece com o acima.

Bem, espero que isso ajude alguém no futuro.

Se você quiser fazer várias solicitações JSONP através do serviço $ http, você deve usar um pequeno hack. Mudança Agular JSON_CALLBACK para o valor interno e a melhor maneira de usar a próxima solução: coloque este código js no arquivo js retornado:

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

Para ter certeza de que esse código funcionará para você, por favor, verifique o método createHttpBackend em fonts angulares.