2016-10-20 3 views
0

私はAngularの新機能です。ボタンクリックからAjax呼び出しをキャンセルする方法を理解しようとしています。私は次のコードを書いて、それをさらに追加する方法を教えてください。 あらかじめありがとうございます... !!!

HTML

<a ng-click="cancelCall()" id="pods-cancel-search-button" title="Cancel" class="form-button primary" ><i class="fa fa-search fa-fw"></i>Cancel Search</a> 

サービス

paymentSearchApp.service('paymentSearchResponse',['$http', '$log', function($http, $log){ 
//var response = []; 
return { 
    findResponse: (function(data){ 
     return $http({ 
      url:'data/result.json', 
      data:data, 
      dataType: 'JSON', 
      contentType: 'application/json; characterset=utf-8', 
      method: 'POST' 
     }).then(function(resp){ 
      var response = resp; 
      return response.data; 
     },function(resp){ 
      $log.error("ERROR occured"); 
     }); 
    }) 
}; 
return paymentSearchResponse; 


}]); 

コントローラ

paymentSearchApp.controller('paymentSearchCtrl', function (paymentSearchService,paymentSearchResponse, $scope) { 

paymentSearchResponse.findResponse(requestPayLoadPacked).then(
         function(response){ 
          //operation on response 
         },function(){ 
          alert("error in getting response from payment search service"); 
         } 
         $scope.cancel = function(){ 
         alert("cancel ajax call"); 

         } 
        ); 

}); 

答えて

1

How to cancel an $http request in AngularJS?を参照してください。

あなたのサービスでは、追加のパラメータを追加します。

paymentSearchApp.service('paymentSearchResponse',['$http', '$log', function($http, $log){ 
    //var response = []; 
    return { 
    findResponse: (function(data, timeoutCanceler){ 
     return $http({ 
     url: 'data/result.json', 
     data: data, 
     timeout: timeoutCanceler.promise, 
     dataType: 'JSON', 
     contentType: 'application/json; characterset=utf-8', 
     method: 'POST' 
     }).then(function(resp){ 
     var response = resp; 
     return response.data; 
     },function(resp){ 
     $log.error("ERROR occured"); 
     }); 
    }) 
    }; 
    return paymentSearchResponse; 
}]); 

コントローラ:

paymentSearchApp.controller('paymentSearchCtrl', function (paymentSearchService, paymentSearchResponse, $scope, $q) { 

    var timeoutCanceler = $q.defer(); 
    paymentSearchResponse.findResponse(requestPayLoadPacked, timeoutCanceler).then(
    function(response){ 
     //operation on response 
    },function(){ 
     alert("error in getting response from payment search service"); 
    }; 

    $scope.cancelCall = function(){ 
    timeoutCanceler.resolve(); 
    alert("cancel ajax call"); 
    } 
); 

}); 

を私はライブのコードでこれをチェックしませんでしたが、それは、ガイドにあなたが使用する必要がありますライン

+0

ありがとう、これは私の問題を解決しました.. !!!! –

1

を与える必要があります$qなど:

var canceller = $q.defer(); 

paymentSearchResponse.findResponse(requestPayLoadPacked).then(
         function(response){ 
          //operation on response 
          canceller.resolve(response); 
          return canceller.promise; 
         },function(){ 
          alert("error in getting response from payment search service"); 
         } 
         $scope.cancel = function(){ 
         alert("cancel ajax call"); 
         canceller.resolve(); 
         } 
        ); 

これを読みなさいmanuel最初。

関連する問題