Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: AngularJS - Dostęp do zmiennej globalnej - dane JSON
Forum PHP.pl > Forum > XML, AJAX
LowiczakPL
Jako naukę angulara wybrałem sobie za zadanie napisanie prościutkiej gry
na WWW: http://gra.w16.pl/angular/
na GITHUBie: https://github.com/RobertRorog/appGame

Mam problem ze zmienną globalną, wczytuję tablicę z wartościami z pliku JSONa i nie mogę się do nich dostać w żaden sposób w aplikacji.


<script>
var app = angular.module('myApp', []), global={};
app.controller('customersCtrl', function($scope, $http) {


$http.get("customers.php").then(function (response) {
$scope.myData = response.data.records;
global.obj = response.data.records;
console.log(global); // tu jest OK JSON ladnie sie wczytal
});

console.log(global); // ale potrzebuje tu sie dostac do wartosci i nie sa widoczne

});
</script>
nospor
A w konsoli w jakiej kolejnosci widzisz console.log ?
LowiczakPL
no faktycznie najpierw widzę to co potrzebuje a dopiero to co jest wczytanie

pusty obiekt

request get

pełny obiekt

jak to zmienić aby poczekać na get i odwołać się do obiektu po wykonaniu requestu?
nospor
Po to wlasnie jest .then by zlapac co po zakonczeniu requestu, Czemu tam nie zrobisz co masz zrobic?
LowiczakPL
kombinuję na różne sposoby ale poza funkcją wczytania JSONA dane nie są widoczne

mam fabrykę z then i w niej jest ok ale poza już nie widać nic, za słaby jeszcze jestem w JSie

  1. factoryMinesData.getData().then(function(data){
  2. $scope.listOfMines = data[1];
  3. $scope.resGold = data[1][0].resources.res;
  4. $scope.resStone = data[1][1].resources.res;
  5. $scope.resWood = data[1][2].resources.res;
  6. $scope.resStorage = data[1][3].resources.res;
  7. console.log(data[1]);
  8. });
  9.  
  10. console.log($scope.listOfMines); // nie wiczać

nospor
Zrozum wkoncu, ze to jest AJAX i jest ASYNCHRONICZNY. Po to wlasnie jest THEN by w nim robic wszystko co ma sie robic po wczytaniu ajax. Czemu nie chcesz tego zrobic THEN tylko sie upierasz i ciagle robisz poza THEN??
LowiczakPL
Nie upieram się tylko z mojej niewiedzy chciałem mieć globalny dostęp do obiektu tablicy JSON po jej wczytaniu.

Dzięki za podpowiedź.



nospor
I masz po jej wczytaniu. Ino tylko ze wczytanie nastepuje pozniej niz ci sie wydawalo wink.gif
LowiczakPL
No to w takim razie będę cierpliwie czekał na wczytanie danych wink.gif

Dam jakiś interwał i sprawdzanie czy wszystkie dane JSON wczytały się, a userowi dam spinnera, co sądzisz o takim rozwiązaniu?
nospor
No ale czy ty czytasz co sie do ciebie pisze? THEN sie odpala po wczytaniu i juz. NIe musisz robic zadnych interwalow....

W przypadku AJAX przestan myslec staroswiecko LINI PO LINII. AJAX sie tak nie wykonuje. Po to wymyslono wiec THEN i on sie odpali po wykonaniu AJAX. ALe kod co miales poza THEN odpali sie duzo wczesniej. DLatego swojej rzeczy masz zrobic w THEN
LowiczakPL
Dzięki za dogłębne wytłumaczenie problemu i naprowadzanie mnie mimo mojej upartości. Wstawiam moje rozwiązanie, może komuś się przyda.



To jest ładowarka JSONÓW i inicjalizacja strony
  1. $scope.loadFeed = function() {
  2.  
  3. factoryMinesData.getData().then(function(data){
  4. $scope.listOfMines = data[1];
  5.  
  6. return data;
  7. }).then(function(data){
  8. $scope.listDataMines = data[0];
  9.  
  10. return data;
  11. }).then(function(data){
  12. console.log($scope.listOfMines); // jest OK
  13. console.log($scope.listDataMines); // jest OK
  14.  
  15. $('#mydiv').hide();
  16. });
  17. }
  18.  
  19. $scope.loadFeed();


to jest SPINNER na stronie

  1. <div id="mydiv">
  2. <img src="assets/img/ajax-loader.gif" class="ajax-loader"/>
  3. </div>
  4.  
  5. #mydiv {
  6. position:absolute;
  7. top:0;
  8. left:0;
  9. width:100%;
  10. height:100%;
  11. z-index:1000;
  12. background-color:grey;
  13. opacity: .8;
  14. }
  15.  
  16. .ajax-loader {
  17. position: absolute;
  18. left: 50%;
  19. top: 50%;
  20. margin-left: -32px; /* -1 * image width / 2 */
  21. margin-top: -32px; /* -1 * image height / 2 */
  22. display: block;
  23. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.