16

$http または angularjs に関して私が見つけたほとんどすべての質問または説明は、一般的に、リクエストからの応答を変更できると想定しているようです。私はそれを行うことができず、取得している応答の形式が正しくありません (AngularJS パーサーによると)。一貫した方法で不正な形式であるため、プレーンテキストを変更して解析する前に問題を修正できますが、応答インターセプターと変換応答関数の両方がデフォルトの (コンテンツタイプベース?) 解析の後に発生します。

編集:問題は、JSONP 方法論を使用して別のサイトからの情報を要求する必要があるという事実にありますが、データには期待される JSONP コールバックがないため、何か (ブラウザベースかどうかはまだわかりません)コンテンツまたは AngularJS コードで) 構文エラーをスローします。

新しい質問: 誰もこれを回避する方法を知っていますか?

4

3 に答える 3

8

これはテスト済みで、動作します。ご不明な点がございましたら、お気軽にお問い合わせください。http://jsfiddle.net/moderndegree/Kn3Tc/

HTML

<div ng-app="myApp">
    <div ng-controller="myController">
        {{results.tada}}
    </div>
</div>

Javascript

angular.module('myApp', ['ngResource']).
factory('myService', function($http, $resource, $log){
    return $resource('/', {}, {
        get: {
            method: 'GET',
            // placed custom transform ahead of $http default
            transformRequest: [function(data, headersGetter){
                $log.info(data);
                $log.info(headersGetter());
            }].concat($http.defaults.transformRequest),
            // placed custom transform ahead of $http default
            transformResponse: [function (data, headersGetter) {
                $log.info(data);
                $log.info(headersGetter());
                data = {tada:"Check your console"};
                return data;
            }].concat($http.defaults.transformResponse)
        }
    });
}).
controller('myController', function(myService, $scope) {
    $scope.results = myService.get();
});

更新 JSONP を使用するには、メソッドを JSONP に切り替えるだけです。ngResource の詳細については、こちらをご覧ください。

于 2013-06-27T01:19:15.920 に答える
1

これがAngularドキュメントの内容です

デフォルトの変換をグローバルに拡張またはオーバーライドするには、$httpProvider.defaults.transformRequest および $httpProvider.defaults.transformResponse プロパティを変更します。これらのプロパティは、デフォルトでは変換関数の配列であり、新しい変換関数を変換チェーンにプッシュまたはシフト解除できます。また、配列ラッパーを使用せずに変換関数をこれらのプロパティに直接割り当てることで、デフォルトの変換を完全にオーバーライドすることもできます。

基本的にあなたがする必要があるのは $httpProvider を設定することです

angular.module('myApp', [])
    .config(['$httpProvider', function ($httpProvider) {
//Define your transform function
//push your trasform function to the start of the array  $httpProvider.defaults.transformResponse
//Or replace the transformResponse array with a function or a new array of tranform functions.

}]);

これで、実装する trasform 関数が配列の最初の関数になるはずです。そこにはJSON変換関数への文字列がすでにあるので。

于 2013-06-27T03:41:21.603 に答える