2016-03-29 6 views
1

誰かが$ httpリクエストが無限のリクエストをサーバーに送信している理由を説明できますか?

. 
.  
. 
this.setCookie = function(){ 
     username = "Some random guy" 
     alert(45) 
} 
. 
. 
. 

HTML:私のアプリケーションで 、このコードは次のように、私はhttpリクエストを削除すると

(function(){ 
    var app = angular.module("GrahamsSocksProducts", ["ngCookies"]); 
    app.controller("ProductsController", ["$controller", "$http", "$cookies", function($controller, $http, $cookies){ 
. 
. 
. 
this.setCookie = function(){ 
     username = "Some random guy" 
     alert(45) 

     $http({ 
      method : "GET", 
      url : "http://_____________", 
      params : { username : username } 
     }).then(function(){ 
      //do something 
     }) 
    } 

は、しかし、唯一の単一の要求がサーバに渡され、サーバーに無限のリクエストを送信します私はこのような他の質問を読んでいる

<div ng-app="GrahamsSocksProducts"> 
     <div ng-controller="ProductsController as products"> 
     {{ products.setCookie() }} 
      <div class="row"> 
       <div ng-repeat="product in products.products"> 
        <div class="col-sm-4 col-lg-4 col-md-4"> 
         <div class="thumbnail"> 
          <img ng-src="{{products.getImageTag(product)}}"> 
          <div class="caption"> 
           <h4 class="pull-right">${{ product.price }}</h4> 
           <h4> 
            <a href="#"> {{ product.name }}</a> 
           </h4> 
           <p>{{ product.description }}</a>.</p> 
           </div> 
        </div> 
        <div class="ratings"> 
         <p class="pull-right">{{ product.ratings }}/5</p> 
         <p> 
           <span ng-class="products.getStarColor(product.ratings, 1)" ng-click="product.ratings=1"></span> 
           <span ng-class="products.getStarColor(product.ratings, 2)" ng-click="product.ratings=2"></span> 
           <span ng-class="products.getStarColor(product.ratings, 3)" ng-click="product.ratings=3"></span> 
           <span ng-class="products.getStarColor(product.ratings, 4)" ng-click="product.ratings=4"></span> 
           <span ng-class="products.getStarColor(product.ratings, 5)" ng-click="product.ratings=5"></span> 
         </p> 
        </div> 
        <div> 
         <button class="btn btn-primary" ng-click="products.addToCart(product)">Add to Cart</button> 
         <button class="btn btn-default">Checkout</button> 
        </div> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col-md-12"> 
        <div class="container">     
         <div class="jumbotron"> 
          <ul class="list-group"ng-repeat="cartProduct in products.getCartNameAndQuantity()"> 
           <li class="list-group-item">{{ cartProduct.name }} ({{ cartProduct.quantity }})</li> 
          </ul> 
          Cart products price : {{ products.getCartPrice() }} 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 

Infinite loop when trying to make Angularjs display a promise 彼らはおよそ答えていますAngularJSが双方向のデータバインディングを可能にする方法ですが、この場合、$ httpコードが削除されると、要求は1回送信されます。それ以外の場合は無限回送信されます。

答えて

4

式{{products.setCookie()}}は、ダイジェストループが実行されるたびに実行されます。ページが変わるたびに、クリック、イベントなど私はなぜあなたはビュー自体にこの表現を持っているのか分かりませんが、別の場所に置く必要があります

+2

'ProductsController'がインスタンス化されたときにOPがこれを実行したい場合これをコントローラー定義の本文に入れてください。 – nicooga

+0

はい、これははるかに良い場所です。コントローラーがインスタンス化されたときにのみ実行されます – Austin

+2

この関数呼び出しをビューから削除して、コントローラーで設定された値にバインドする必要があります。 Austin

関連する問題