如何在AngularJS中阻塞http请求,以便可以在下一行使用$http响应?
在下面的示例中,$http
对象不会将结果返回到下一行,因此我可以将此结果传递给JavaScript库fullcalender()
,因为$scope.data
返回空值。
以下是示例代码:
$http.get('URL').success(function(data){
$scope.data = data;
});
$.fullCalender({
data: $scope.data
});
发布于 2014-11-05 16:16:07
为此,您可以使用promises。
下面是一个示例:
$scope.myXhr = function(){
var deferred = $q.defer();
$http({
url: 'ajax.php',
method: 'POST',
data:postData,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
//if request is successful
.success(function(data,status,headers,config){
//resolve the promise
deferred.resolve('request successful');
})
//if request is not successful
.error(function(data,status,headers,config){
//reject the promise
deferred.reject('ERROR');
});
//return the promise
return deferred.promise;
}
$scope.callXhrAsynchronous = function(){
var myPromise = $scope.myXhr();
// wait until the promise return resolve or eject
//"then" has 2 functions (resolveFunction, rejectFunction)
myPromise.then(function(resolve){
alert(resolve);
}, function(reject){
alert(reject)
});
}
发布于 2014-11-05 14:19:33
你不能,你需要通过承诺来处理它,但你可以试着这样做:
$http.get('URL').success(function(data){
angular.copy(data, $scope.data);
});
$.fullCalender({
data: $scope.data
});
但大多数人都会做
$http.get('URL').success(function(data){
$.fullCalender({
data: data
});
});
如果您的fullCalender对象不能处理异步数据,则可能需要将其包装在ng-if之类的内容中,或者在提供数据时强制其重绘。您还可以使用路由解析强制控制器在加载数据之前不加载。
https://stackoverflow.com/questions/26750814
复制相似问题