JavaScript Ajax 不按时更新变量
javascript ajax not updating variable on time
我相信这可能很容易,但我在这里搞砸了ajax调用。我对javascript很陌生,所以我真的不知道我做错了什么。 我试图在网上查找它,但无法在正确的时间让我的电话正常工作。 任何帮助真的非常感谢。
我所做的只是将NHL球员数据从json获取到我使用angularjs创建的表中。 现在,当$scope.players未定义时,将显示该表,但是一旦ajax完成,它就有了数据。 我没有在正确的时间显示它,我的表总是空的
花名册控制器相关代码:
(function () {
'use strict';
angular.module("DevilsFanApp")
.controller("RosterController", RosterController);
function RosterController($rootScope, $scope, RosterService) {
$scope.players = RosterService.players;
$scope.addPlayer = addPlayer;
$scope.updatePlayer = updatePlayer;
$scope.deletePlayer = deletePlayer;
$scope.selectPlayer = selectPlayer;
$scope.fetchPlayers = fetchPlayers;
function init() {
fetchPlayers(function(res){
$scope.players = RosterService.players;
console.log("Goalies Now", $scope.players);
});
}
init();
function fetchPlayers(callback) {
var players = RosterService.updatePlayers(function(res){
callback(players);
});
}
}
})();
名册服务:
function RosterService($rootScope) {
var model = {
players: [],
updatePlayers: updatePlayers,
setCurrentPlayer: setCurrentPlayer,
getCurrentPlayer: getCurrentPlayer,
findPlayerByName: findPlayerByName,
findAllPlayers: findAllPlayers,
createPlayer: createPlayer,
deletePlayerById: deletePlayerById,
updatePlayer: updatePlayer,
findPlayerById: findPlayerById
};
return model;
function updatePlayers(callback){
$.ajax({
url: URL,
dataType: 'json',
type: 'GET',
}).done(function(response) {
var data = angular.fromJson(response);
for (var g = 0; g < data.goalie.length; g++) {
var player = model.findPlayerByName(data.goalie[g].name);
if (player == null) {
var newPlayer = {
_id: (new Date).getTime(),
name: data.goalie[g].name,
position: data.goalie[g].position,
height: data.goalie[g].height,
weight: data.goalie[g].weight,
birthday: data.goalie[g].birthdate,
age: 25,
birthPlace: data.goalie[g].birthplace,
number: data.goalie[g].number
};
model.players.push(newPlayer);
}
else{
callback(null)
}
}
return callback(model.players)
});
}
名册查看表代码:
<tr ng-repeat="player in players">
<td>{{player.number}}</td>
<td>{{player.name}}</td>
<td>{{player.position}}</td>
<td>{{player.height}}</td>
<td>{{player.weight}}</td>
<td>{{player.birthday}}</td>
<td>{{player.age}}</td>
<td>{{player.birthPlace}}</td>
<td>
<div class="col-sm-4 btn-group">
<button ng-click="deletePlayer($index)" type="button" class="btn btn-table">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</button>
<button ng-click="selectPlayer($index)" type="button" class="btn btn-table">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</button>
</div>
</td>
</tr>
他们试图
实现的方式似乎太像"JQuery 方式",这与角度的工作方式非常不同。首先,避免回调,改用承诺。此外,如果它是一个选项,请改用 $http
或 restangular。
遵循我的建议的服务示例如下所示(该示例仅适用于 fetchPlayer 功能):
angular.module('myModule', [])
.service('playersService', ['$http', function($http){
this.fetchPlayers = function(){
return $http.get(url);
}
}])
.controller('playerCtrl', ['$scope', 'playersService', function($scope, playersService){
$scope.players = []; //Start as an empty array
this.fetchPlayers = function(){
playersService.fetchPlayers.then(function(players){
//here you can process the data as you need
$scope.players = players; //assign to a property in scope so template can see it
});
};
this.fetchPlayers(); //Invoke fetch on load
}])
在这里,您可以在项目中找到一个控制器,该控制器使用 $http 执行 CRUD 操作并处理响应以在表中显示它们,下面是执行对后端 API 调用的服务实现。
相关文章:
- Jquery-每个循环不更新变量
- 函数返回后更新变量
- 我无法通过angularjs中的指令更新变量
- 可以't在quizz页面范围问题上用最终分数更新变量
- 如何在AJAX会话之外更新变量?(Backbone JS/CoffeeScript)
- Javascript 对象方法不更新变量
- 当jquery中的输入发生更改时更新变量
- 无法使用AngularJS更新变量
- 在arr.splice()之后更新变量
- Javascript承诺并更新变量
- jQuery-在输入值更改时更新变量
- 使用数据属性通过 jquery 定位和更新变量
- 从数组中删除不会更新变量内的引用
- 冒泡 从嵌套函数更新变量
- 在 .click 上使用 $.ajax 更新变量
- Javascript - Bootstrap-Slider,如何根据滑块的值更新变量
- JavaScript Ajax 不按时更新变量
- 如何在 JS 中更新变量
- Javascript 没有更新变量
- 在函数中更新变量时,变量不会反映视图中的更新