2

次のコードに問題があります。

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 Bad Request - 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 実装がエラーを返すのはなぜですか?

4

2 に答える 2

4

角度のコールバック関数にいくつかの問題があります、私はgitで問題を開きました

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

コールバック名は「JSONP_CALLBACK」である必要があります。この場合、angularはコールバック名をcallback=angular.callbacks._1に変換します。

「angular.callbacks._1」コールバック名を受け入れることができないいくつかのWebWebサービスがあります。

解決 :

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/

重要なのは、jsonの応答を取得するには、別のjavascript関数を呼び出す必要があるということです。

この助けを願っています

于 2012-11-11T08:11:28.407 に答える
0

この問題に本当の解決策を追加すると思いました。これは実用的なソリューションです。

ここにコードがあります

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"}]

ここをクリックして直接リンクに移動します

于 2015-06-16T04:51:43.587 に答える