Javascript 单击“重新加载”按钮后未调用AngularJS-then()方法
由于AJAX的异步特性,我以前遇到过变量未定义的问题。我已经解决了这个问题,但是,现在我有了一个新的问题。我有以下代码:Javascript 单击“重新加载”按钮后未调用AngularJS-then()方法,javascript,ajax,angularjs,rest,Javascript,Ajax,Angularjs,Rest,由于AJAX的异步特性,我以前遇到过变量未定义的问题。我已经解决了这个问题,但是,现在我有了一个新的问题。我有以下代码: $scope.cities = [ {name: 'Phoenix,US'}, {name: 'Atlanta,US'}, {name: 'Honolulu,US'} ]; $scope.items = []; $scope.reload = function() { alert("Reload clicked"); var pr
$scope.cities = [
{name: 'Phoenix,US'},
{name: 'Atlanta,US'},
{name: 'Honolulu,US'}
];
$scope.items = [];
$scope.reload = function() {
alert("Reload clicked");
var promises = [];
angular.forEach($scope.cities, function(city) {
var deferred = $q.defer();
delete $http.defaults.headers.common['X-Requested-With'];
$http.get('http://api.openweathermap.org/data/2.5/weather?q=' + city.name).success(function(data, status, headers, config) {
alert("success");
deferred.resolve(data);
});
promises.push(deferred.promise);
});
return $q.all(promises);
};
//not being called after reload button is clicked
$scope.reload().then(function(data) {
$scope.name0 = data[0].name;
alert($scope.name0);
);
我的$scope.reload
在初始页面加载时以及单击我的重新加载按钮时都会被调用。但是,scope.reload().then(函数(数据))
在单击我的重新加载按钮后没有被调用;它只在初始页面加载时被调用,即使调用了$scope.reload
(通过我的警报语句测试)
有人能告诉我我做错了什么吗?不确定这是否会产生影响,但你真的不需要在循环中手动创建新的承诺$http已返回您可以使用的承诺:
var promises = [];
angular.forEach($scope.cities, function(city) {
delete $http.defaults.headers.common['X-Requested-With'];
var promise = $http.get('http://api.openweathermap.org/data/2.5/weather?q=' + city.name);
promise.success(function(data, status, headers, config) {
alert("success");
});
promises.push(promise);
});
您必须将
then()
函数放入reload()
函数中
$scope.reload = function () {
var promises = [];
angular.forEach($scope.cities, function (city) {
var deferred = $q.defer();
delete $http.defaults.headers.common['X-Requested-With'];
$http.get('http://api.openweathermap.org/data/2.5/weather?q=' + city.name).success(function (data, status, headers, config) {
deferred.resolve(data);
});
promises.push(deferred.promise);
});
// This block here:
$q.all(promises).then(function(data) {
$scope.answer = data;
});
};
工作小提琴我为你做的就是让你看 我移动了这个代码:
$q.all(promises).then(function(data) {
$scope.answer = data;
});
并将其放入您的reload
函数中
$scope.reload = function () {
var promises = [];
angular.forEach($scope.cities, function (city) {
var deferred = $q.defer();
delete $http.defaults.headers.common['X-Requested-With'];
$http.get('http://api.openweathermap.org/data/2.5/weather?q=' + city.name).success(function (data, status, headers, config) {
deferred.resolve(data);
});
promises.push(deferred.promise);
});
// This block here:
$q.all(promises).then(function(data) {
$scope.answer = data;
});
};
你确定ajax请求成功了吗?是的(我刚刚测试了它,里面有一条alert语句)。为了确保这一点,请尝试在
调用中添加第二个参数,然后使用错误回调来拒绝延迟的on错误。在解决每个延迟的问题时,还要添加一些日志,确保看到每个城市的天气信息。那么,我该怎么做呢?我是AngularJS的新手,你能帮忙吗?你已经“成功”被提醒了-你看到三次了吗?