2016-05-04 18 views
0

いくつかのAPIに対してGETリクエストを行うために簡単なAngularコードを書きましたが、それは必ずしも機能していません。たとえば、私がリクエストをするときAngularJS get request fail

https://api.ofx.com/PublicSite.ApiService/OFX/spotrate/Individual/EUR/USD/10000?format=json

私のコードは完全に動作します。

しかし、コードを同じコードを使用して

https://www.fcexchange.com/umbraco/api/CurrencyExchangeRateApi/GetRate?callback=JSON_CALLBACK&from=EUR&to=GBP

にリクエストを作ることは動作しません。私はJSONPの使用に出くわしたいくつかの検索を行った後、今

"SyntaxError: JSON.parse: unexpected end of data at line 1".

:応答を検査する際に、私は次のエラーメッセージが表示されます。そこで、私は$ http.jsonp ... を使用してコードを変更し、 "&コールバック= JSON_CALLBACK"を追加しました。私は(火かき棒でブラウザで)私の応答を確認し、JSONデータを正常に受信しました。しかし、私のAngularcodeはまだ私にエラーを投げ、それは私のための応答データを取得しません。

(ブラウザのURLにアクセスしたときにも、私はいつもJSONデータを取得します)。

私はangularJSにはかなり新しく、昨日JSONPメソッドに遭遇しました。 私は、サーバーが期待通りのフォーマットを返さないと思います(コールバック名なしで普通のJSONを返します)。そのために私のコードがエラーを投げていますか?サーバーがJSONPをまったく使用していない/許可していない可能性がありますか?しかし、どうして私は正しい応答を得ているように見え、通常のGET要求を使用していないのでしょうか?

マイコード:

var frankComparesApp = angular.module('frankComparesApp', []); 


frankComparesApp.controller('frankComparesCtrl', function($scope, $http) { 

$http.get('currency.json').then(function successCallback(response) { 

    $scope.currencyOptions = response.data; 
    $scope.choice = null; 
}, function errorCall (response) { 
    // Function for handling failure. 

    $scope.currencyOptions=[]; 
}); // End of http.get 

$scope.startComparing = function() { 

$scope.ofxURL = 'https://www.fcexchange.com/umbraco/api/CurrencyExchangeRateApi/GetRate?callback=JSON_CALLBACK&from=EUR&to=GBP'; 
$http.jsonp($scope.ofxURL).then(function successCallback(response) { 
    $scope.answer = response.data; 
}, function errorCall (response) { 
    $scope.answer = "fail"; 
}); // End of http.get 
}; // End of startComparing(); 


}); // End of frankComparesCtrl 

答えて

0

これは、CORSの問題のように見えます。 www.fcexchange.com以外のドメインからデータを要求しようとしていますので、このようにエラーが発生しますplunkr

コンソールをdevtoolsで確認してください。

+0

あなたは私の答えを読みましたか? plunkrは問題なく動作しています。 CORSの問題のために失敗した要求です。 http://imgur.com/FP8dRpk –

+0

ご返信ありがとうございます。しかし、私はすでに私の最初の投稿に述べられているように、これを認識していました。だから私は私のexamplecodeのようなgetの代わりにJSONPを使用しています。 plunkrの例を編集し、jsonp(+ paramsに 'JSON_CALLBACK'コールバックを追加)を使用すると、devtoolskitで見たときにJSONで要求された応答が返されることがわかります。それはjavascript jsonpでラップされていないので、おそらくエラーコードですが、私は応答を戻しているのでJSONだけを取得する方法があります。ちょうど私のコードにそれをプッシュするためにいくつかの方法が必要です:) – Jordan

+0

あなたは正しいです。これをチェックしてください:http://stackoverflow.com/a/26745389/2652883 これは有効なJSONPレスポンスです:https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero –