2015-05-27 47 views
0

我有一個angularJs應用程序,它通過點擊一個鏈接來進行api調用。但每次我點擊鏈接,它都會向服務器發送2個相同的API調用。爲什麼會發生這種情況,我如何解決這個問題如何通過在AngularJs中點擊一下來防止發送重複請求

我的服務就是這樣的: SomethingService

function getData() { 
    return apiSettings.getApiInformation().then(function (response) { 
     var url = response.data.Url + "/odata/Something?$expand=Something"; 

      var data = { 
       url: url, 
       type: "GET", 
       token: response.data.Token, 
       data: {}, 
       async: true, 
       cache: false, 
       headers: { 
         "accept": "application/json; charset=utf-8", 
         'Authorization': 'Bearer ' + response.data.Token 
         }, 
       dataType: "json", 
       success: {}, 
       error: {}, 
       complete: {}, 
       fail:{} 
      }; 
      return $http(data); 
    }); 
} 

API設定:

angular.module('myApp.services') 
.factory('apiSettings', apiSettings); 

apiSettings.$inject = ['$http']; 

function apiSettings($http) { 
    return { 
      getApiInformation: function() { 
       return $http.get(baseUrl+ '/api/GetApiInformation', {cache: true}); 
      } 
    } 

} 

SomethingController:

var vm = this; 
function getSlots(filterCriteria, selectedValue) { 

    somethingService.getData().then(function (response) { 
     if (response && response.value.length > 0) {    
      vm.someData = response.value; 
     } 
    }); 

查看: 點擊此鏈接調用發送重複的請求

<a ui-sref="something" class="action-icons" id="slotNav"><i class="fa fa-square-o fa-fw"></i> 
something 
</a> 

這個視圖顯示數據

<div ng-repeat="data in vm.someData"> 
     <p> {{data.Name}}</p> 
</div> 

問題getSlots:對於單觸發瀏覽器將像下面這樣的重複請求。第一個電話沒有回調,但第二個電話有回調:

someuls?$expand=something&_=1432722651197 
someuls?$expand=something&_=1432722651197 
+1

哪個調用正在被複制'odata/something'或'api/GetApiInfo..'?爲什麼你同時使用angular的'$ http'和jQuery的'$ .ajax'? – Brocco

+0

odata /正在重複的東西。每撥打一個電話都會有2個電話完成。其他的事情都很好。當我爲兩者使用$ http時,它都會執行相同的操作。 –

+0

我想改變的第一件事就是使用角的'$ http'服務的'odata/something'調用。 '$ http'生活在角域的範圍內(關於範圍),所以它知道何時觸發摘要循環,這是什麼驅動角(包括數據綁定) – Brocco

回答

0

我有一個類似的問題,我固定通過檢查this answer。我已經在HTML中聲明瞭「ng-controller」,並使用routeProvider將其路由到它。通過刪除HTML中的「ng-controller」屬性來解決問題。

希望這會有所幫助。