2017-01-23 5 views
0

:回答者のおかげで、これは実際には有効なコードでしたが、リクエストが傍受され、すべてのパラメータが削除されていました。私がしようとしているAngularJSのパラメータを変更して複数のGETリクエストを送信


は出力に応じて、REST APIにHTTP GETリクエストを繰り返し行うためにとthis questionからソリューションを使用しています。

ただし、リクエストで渡すパラメータの1つを増やしたいとします。基本的に、APIは出力をページングし、それに応じてstartAtの値を増やす必要があります。

マニュアル要求がで正常に動作:

<URL>/board?startAt=50 

そして恩返し:

{"maxResults":50,"startAt":50,"isLast":true,"values":[list_of_values]} 

はここで、これまでに私のコードです:

function getHttpPromise(start_at) { 
    // This function recurses until the server returns isLast = true. 
    // 
    // Each iteration appends the values in response.values to 
    // $scope.boards. 
    test = $http({ 
        url: 'boards', 
        method: 'GET', 
        params: {'startAt': start_at.toString()} 
       }). 
     success(function (response) { 
      console.log(response); // the response contains startAt, which always has 
            // the initial value (0), rather than start_at's value 

      var values = response.values; 
      for (var i in values) { 
       var board = values[i]; 
       $scope.boards[board.id] = board; 
      } 

      if (response.isLast) { 
       // We have received all the boards. 
       return true; 
      } else { 
       // Increment start_at and return another http request promise. 
       start_at += response.maxResults; 
       return getHttpPromise(start_at); 
      } 
     } 
    ); 

    console.log(test); // params is correct here 

    return test; 
} 

この関数は、次のように呼び出します

jiraWorkLog.controller('SprintSelectCtlr', 
function($scope, $http, $routeParams) { 
    $scope.init = function() { 
     $scope.boards = new Object(); 

     getHttpPromise(0).then(
      function (dummy_var) { 
      for (var board in $scope.boards) { 
       ... 
      } 
     } 
    ); 
} 
... 
); 
+0

あなたは 'はconsole.log(RESPOを行うときに、コンソールに何を見ていますnse.maxResults); 'それを' start_at'に追加する前に? 値がインクリメントされる前と後に 'console.log(start_at);'を実行したときに何が表示されますか? – Nope

+0

どこから呼び出すのですか?** getHttpPromise ** ?? – Aravind

+0

@Fran値が正しくインクリメントされています( 'response.maxResults = 50'と' start_at = 0 => start_at = 50'など)。 @Aravind私はそれに応じて私の質問を編集しました。 'SprintCtlr'オブジェクトにあります。 –

答えて

0

$http().success()は推奨されていません。 $http().then()を使用してください。

thenは、dataというプロパティを持つresponseオブジェクトが渡される関数よりも受け取られます。そこにあなたのvaluesがあります。

あなたは私はあなたが再帰的にこの問題を解決することではない助言する必要があり、より徹底的にあなたのコードを読んだ後here

さらに読むことができます。データをページする必要がない場合は、すべてのレコードを前もって要求してください。

なぜ、最初の結果しか得られないのか、なぜそれが返されるのか、呼び出し元のコントローラーなのかという理由で答えてください。コントローラーが解決を待っているという約束を返しています。他のすべての再帰呼び出しは、コントローラがすでに完了してからのみ発生します。

+0

問題は、私のリクエストが正しく送信されず、値にアクセスできないことです。要求が常に 'startAt = 0 'で送信されています –

+0

コントローラを追加したので、ハードコードされた0で呼び出されていることがわかりました。そのため、リクエストは常に0と一緒に送信されます – idan

+0

Chromeデベロッパービューで実行すると、 'start_at'の値は、その後の各呼び出しで(正しい量だけ)増加しています。最初の呼び出しで0がちょうど最初の値になるはずです。 –

0

応答はすべてのHTTPのものを保持し、あなたがそれからデータを取得したい...

私は、次のリンクはあなたにAngular Http

あなたは再帰を持っている別の問題を助けるかもしれないことを考えますあなたはローカル変数を更新していることであると誤ってそれを使用する...

function getHttpPromise(start_at) { 
// This function recurses until the server returns isLast = true. 
// 
// Each iteration appends the values in response.values to 
// $scope.boards. 
test = $http({ 
       url: 'boards', 
       method: 'GET', 
       params: {'startAt': start_at.toString()} 
      }). 
    success(function (response) { 
     console.log(response.data); // the response contains startAt, which always has 
           // the initial value (0), rather than start_at's value 

     var values = response.data; 
     for (var i in values) { 
      var board = values[i]; 
      $scope.boards[board.id] = board; 
     } 

     if (response.data.isLast) { 
      // We have received all the boards. 
      return true; 
     } else { 
      // Increment start_at and return another http request promise. 
      return getHttpPromise(response.data.maxResults+1); 
     } 
    } 
); 

console.log(test); // params is correct here 

return test; 

}

+0

私が下で述べたように、問題は応答を解析するのではなく、要求を定式化することです。応答は有効です(正しい)が、私が送信する要求は、正しい 'startAt = 'を使用していない。 –

+0

再帰呼び出しをgetHttpPromise(response.data.maxResults + 1)に更新しようとします。 – silver

+0

「response.data.maxResults + 1」は常に同じですが(51)。値 'start_at'は正しくインクリメントされていますが、GETリクエストでは使用されていません。 –

関連する問題