3

DB からデータを取得する NodeJS サーバーを呼び出す AngularJS アプリを構築しています。NodeJS は JSON.stringify(someArrayWithData) を返します。

AngularJS コードは次のとおりです。

$scope.getMainGroups = function(){
    $http.jsonp("http://127.0.0.1:3000/get/MainGroups?callback=JSON_CALLBACK").success(function(data, status, headers, config) {
            $scope.MainGroups = data;
        }).error(function(data, status, headers, config) {
            $scope.MainGroups = status;
        });
};

$scope.MainGroups は、Chrome デバッガーで結果が返されたことを確認できる場合でも (200 OK)、成功ではなく .error になります。

私は何が欠けていますか?

4

2 に答える 2

6

サーバー側で有効な JSON 応答を返す必要があります。200 OK は、DOM に挿入される GET 要求にすぎません。サーバーから正しい応答コードで有効な JSON 応答を返していないに違いありません。

サーバー側 (PHP) で応答を作成する方法の例を次に示します。 単純な jQuery、PHP、および JSONP の例?

于 2013-08-03T13:58:23.510 に答える
0

ここで回答したように、NodeJS 応答を変更する必要があります。JSONP 回答は、AngularJS が URL に追加した正確なテキストで始まる必要があります (たとえば、'angular.callbacks._1')。

// changes in your server script used by NodeJS
// Required for JSONP calls, 'callback' matches the '?callback=JSON_CALLBACK'
app.set('jsonp callback name', 'callback'); 

// ... in your response change json to jsonp
res.jsonp(votes);

これらの変更を行った後、サーバーがパラメーターで「コールバック」を検出すると、次のように応答します。

/**/ typeof angular.callbacks._1 === '関数' && angular.callbacks._1([{"votes":3,"title":"new topic", etc...

はい、AngularJS は「成功」関数を正しくコールバックします。

于 2014-09-08T10:36:40.657 に答える