JSONP不起作用的Angular $资源



我遇到了以下代码的麻烦:

angular.module('offerServices', ['ngResource'])
    .factory('Offer', function ($resource) {
        return $resource('url/offers', { callback: 'JSON_CALLBACK' },
            {
                query: { method: 'JSONP' }
            }
        );                   
    })
    .factory('Trustyou', function ($resource) {
            return $resource('https://api.trustyou.com/hotels/:id/seal.json', {},
                {
                    query: { method: 'JSONP' }
                }
            );
    });

呼叫guert.query({},function(){});在我的控制器中,没有任何问题。但是这部分不起作用:

       var trustYouData = Trustyou.query({ id: 'd8421e79-99f0-41b2-8d6e-9cfd62a9776b' }, function (data) {
            console.log(data);
        });

这总是返回400错误:

" NetworkError:400不良请求-https://api.trustyou.com/hotels/d8421e79-99f0-41b2-41b2-8d6e-9cfd62a97776b/seal.json?

当我更改代码并使用jquerys.getjson时,我没有任何问题:

 $.getJSON("https://api.trustyou.com/hotels/d8421e79-99f0-41b2-8d6e-9cfd62a9776b/seal.json?callback=?", function (data) {
            console.log(data);                           
        });

为什么jQuery方法工作但Angulars $ Resource实现在这种情况下返回错误?

Angular上的回调函数存在一些问题,我在git

中打开了一个问题

https://github.com/angular/angular.js/issues/1551

回调名称必须为" JSONP_CALLBACK",其中Angular将回调名称转到回调= Angular.Callbacks._1

有一些Web服务,无法接受" angular.callbacks._1"回调名称。

解决方案:

var stock_hack
function stock_search(data) {
    stock_hack = data;
 }

var stock_hack
function stock_search(data) {
    stock_hack = data;
}

function jsonp_example($scope, $http) {
    $scope.doRequest = function() {
        $http({
            method: "JSONP",
            params: {
                input: "GM",
                callback: "stock_search"
            },
            url: "http://dev.markitondemand.com/Api/Lookup/jsonp",
            isArray: true
        }).success(function(data, status) {
/*
                 *Never Goes HERE !!
                 */

        }).error(function(data, status) {
/*
                 * FREAKING HACK !!!!
                 */
            console.info("goes here")
            console.info(stock_hack)
        });
    };

}​

我的小提琴http://jsfiddle.net/pmggr/

重点是您必须调用另一个JavaScript函数才能获得JSON呼吸。

希望此帮助

我想我会为此问题添加一个真正的解决方案。这是一个有效的解决方案。

这是代码

var symbol = 'NFLX';
var url = "http://dev.markitondemand.com/Api/v2/Lookup/jsonp?input="+ symbol +"&callback=JSON_CALLBACK";
$http.jsonp(url)
.success(function(data){
   console.info(data);
}).error(function(data, status) {
   console.info(data);
});

返回

//[{"Symbol":"NFLX","Name":"Netflix Inc","Exchange":"NASDAQ"}]

单击此处转到直接链接

相关内容

最新更新