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

带有jsonp的Angular $ resource不起作用

史劲
2023-03-14
问题内容

我在使用以下代码时遇到了麻烦:

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

调用Offer.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-8d6e-9cfd62a9776b/seal.json?callback=angular.callbacks._1


当我更改代码并使用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会将回调名称转换为callback = angular.callbacks._1

有些Web 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响应。

希望有帮助



 类似资料:
  • 问题内容: 这里有一个简化的示例(改编自Angular网站): 问题 是该线路永远不会被呼叫。这是为什么?其他一切正常。 在这里住小提琴。 问题答案: 此功能仅在1.1.2或更高版本的AngularJs中可用。它在AngularJs的1.1.1或更早版本中不可用。

  • 问题内容: 您能否举一个使用jquery读取jsonp请求的非常简单的示例?我就是无法正常工作。 问题答案: 这是工作示例: 注意所请求URL的末尾。这表明我们要使用JSONP。删除它,将使用原始的JSON请求。由于相同的原产地政策而失败。 您可以在JQuery网站上找到更多信息和示例:http : //api.jquery.com/jQuery.getJSON/

  • 问题内容: 这是我的代码: 显示页面时,默认选中的单选框正确。但这不能取消选中,而我只能在其他两个复选框之间切换吗?我该如何解决这个问题? 问题答案: ng-repeat创建新作用域,因此您应该确定父作用域。 有关更多信息,请参见https://docs.angularjs.org/api/ng/directive/ngRepeat

  • 问题内容: 更新的问题 我的虚拟主机 问题答案: 这是问题的最可能原因。您已经在超级用户的主文件夹中创建了virtualenv。但是该文件夹不太可能被Apache访问。默认情况下,其他任何用户都无法访问用户的主文件夹。 Web服务器和WSGI过程将运行作为一个非特权用户通常命名为,,或者类似的东西。虽然您可以通过更改/ root /上的权限来解决此问题,但这不是很大。如果是普通用户,则危险性会降低

  • 我有一个战争,它在EAP 6.4.x下工作得很好(x目前是8,但也在6和4下,等等下到6.4.0)。 WAR具有一些简单的JMS客户机特性,可以将消息添加到远程机器上的队列中。目标QBroker是ActiveMQ 5.8.0。 从6.4.x到7.0.1开始“端口”;我对AMQ5.8.0 RAR的东西很感兴趣。对于初学者--还不会使用EAP7中的AMQ Artemis的任何东西。最初,我希望在7.0

  • 我在django中使用spotify API/spotipy,需要用户登录到他们的帐户才能访问他们的数据。我使用了“pip3 install django-cors-Headers”并将适当的部分添加到settings.py. 即使这样,我仍然收到有关缺少访问控制允许源标头的错误,并且spotify登录页面无法打开。 jquery.min.js:2 XHR完成加载:GET"http://local