如何防止在AngularJs中单击发送重复请求

时间:2015-05-27 11:29:24

标签: javascript ajax angularjs http

我有一个angularJs应用程序,只需单击一个链接即可进行api调用。但每当我点击链接时,它会向服务器发送2个相同的api调用。为什么会发生这种情况,我该如何解决这个问题。

我的服务就像: 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;
        }
    });

查看: 点击此链接会调用发送重复请求的getSlots

 <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>

问题:对于单个触发器,浏览器会发送重复请求,如下所示。第一个调用没有回调,但第二个调用有回调:

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

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我通过检查this answer来解决这个问题。我在HTML中声明了“ng-controller”,并使用routeProvider路由到它。修复了HTML中删除“ng-controller”属性的问题。

希望这有帮助。