请在下面找到angularjs
工厂方法来调用http请求:
var HttpService = angular.module("HttpService",[]);
HttpService.factory("HttpServiceFactory",['$http', '$q', '$location', '$rootScope' ,function($http, $q, $location, $rootScope){
return {
getData: function(url, headers, bOnErrorRedirect, bShowInPageError, params){
var headerParam = {'Accept':'application/json'};
if(headers !== undefined || headers !== null){
headerParam = $.extend(headerParam, headers);
}
var updatedParams = {'TimeStamp':new Date().getTime()};
updatedParams = $.extend(params, updatedParams);
var deferred = $q.defer();
$http.get(url,{
headers: headerParam,
params : updatedParams
}).success(function(successResponse){
if(successResponse){
var responseJSON = angular.fromJson(successResponse);
if(responseJSON && responseJSON.messages && responseJSON.messages.length){
//Process Error
}else{
deferred.resolve(successResponse);
}
}else{
deferred.resolve(successResponse);
}
}).error(function(errorResponse , status){
//Process Error
console.error("status here:: "+status);
});
return deferred.promise;
}
}
}]);
我在控制器中调用此方法,具有所有必需的依赖项,如下所示:
HttpServiceFactory.getData(args.sURL,null,false,true,args.oQueryParams).then(function(response){
scope.bDataLoading = false;
// process data
})
.catch(function(oResponse) {
scope.bDataLoading = false;
scope.bDisplayError = true;
// process error
});
这里一切正常。但问题是,当我在页面上进行多次http
调用时,UI会冻结,并且在处理请求之前不允许进行交互。
例如,在页面上,我根据用户按输入框和日历控件选择的条件显示2 angular-ui-grid
。在这种情况下,UI会冻结,直到显示两个网格或显示错误消息。
在http
服务电话会议期间,用户无法做任何事情,只需等待完成请求即可。
如何解决UI冻结问题?这是真正的异步行为吗?如果没有,为了实现正确的异步行为,我缺少什么?