2013-04-29 11 views
5

Właśnie zaczynam używać javascript i json.Jak używać JavaScript do ładowania i parsowania statycznego pliku JSON na serwerze

Potrzebuję odczytać dane (funkcja getInformation) z pliku json podczas przetwarzania zdarzenia w funkcji javascript. Więc potrzebuję tego, żeby być synchronicznym. Nie wiem, czy brakuje mi czegoś w kodzie, czy muszę utworzyć żądanie i obsłużyć wywołanie zwrotne, czy też muszę zaimportować dodatkowy javascript do użycia json. Ponieważ nie wiem, jak to działa. To nie działa, ponieważ na końcu tablica jest pusta. Każda pomoc jest zatwierdzana.

Plik json:

{"Users": [ 
    {"Name": "Jane", 
     "Points": 67, 
     "age": 23}, 
    { 
     "Name": "Sam", 
     "Points": 65, 
     "age": 21} 
]} 

Wariant 1 - Funkcja zwana przez inną funkcję, która jest przetwarzana, zdarzenie:

var getInformation = function() 
{ 
    var path = "./data/users.json"; 
    var informationArray= []; 
    console.log("Loading ...."); 
    $.getJSON(path, function(data) 
    { 
     $.each(data, function(key, val) 
     { 
      informationArray.push(key + '-' + val); 
     }); 
    }); 
    return informationArray; 
} 

Wariant 2 - funkcję zwaną przez inną funkcję, która jest przetwarzana, zdarzenie:

var getInformation = function() { 
var path = "./data/users.json"; 
var informationArray= []; 
$.ajax({ 
     url: path, 
     async: false, 
     dataType: 'json', 
     success: function(response) { 
     $.each(response.items, 
     function(item) { 
     informationArray.push(item); 
     }); 
     informationArray.push("success"); 
     } 
     }); 
    return informationArray; } 

Widziałem następujący wątek i próbowałem tego, co jest tam ale nie działa dla mnie. Chciałbym wiedzieć, gdzie jest problem w moim kodzie lub jeśli wymaga specjalnej konfiguracji.

Temat: Is there a version of $getJSON that doesn't use a call back?

+0

co to jest pytanie? co nie działa? – Mathletics

+0

Kiedy mówisz, że próbujesz parsować plik lokalny, masz na myśli klienta lub serwer? Jeśli znajduje się na serwerze, musisz użyć adresu URL do pliku zamiast ścieżki. – Justin

+0

Czy JSON jest generowany dynamicznie, czy pochodzi z pliku '.json'? Ponieważ JSON jest po prostu JavaScript, można go również załadować w taki sam sposób jak skrypt i przechowywać w pamięci lokalnej do interakcji. Tylko myśl. – oomlaut

Odpowiedz

0

Aby załadować plik JSON (i nie wymagają zwrotnego) byłoby użyć:

var url = 'http://yoursite.com/data/users.json'; 
var j = []; 
$.ajax({ 
    type: 'GET', 
    url: url, 
    dataType: 'json', 
    success: function(data) { j = data;}, 
    async: false 
}); 

alert(j.Users[0].Name); 
+0

Dzięki. Dostaję teraz ten błąd. Uncaught TypeError: Nie można odczytać właściwości "0" niezdefiniowanej. Przy okazji, czy istnieje sposób dynamicznego ustawiania adresu URL? – user2333683

+0

Nie działa, tablica j jest pusta.Czy muszę skonfigurować dodatkową bibliotekę lub coś podobnego? – user2333683

+0

Tak, możesz ustawić URL dynamicznie, po prostu ustawisz go jako var, jak w powyższej opcji 2. Z jakiego adresu URL korzystasz? Jeśli wpiszesz go w przeglądarce, powinien wyświetlić JSON. – Justin

5

Kiedy JavaScript jest uruchomiony w przeglądarce potrzebuje, aby żądania AJAX do serwer, aby uzyskać dostęp do pliku JSON. Możliwe jest ręczne tworzenie żądania AJAX, ale jest to trudne i trudne do wykonania we wszystkich przeglądarkach. Zamiast tego większość ludzi używa biblioteki takiej jak jQuery. Trzeba będzie obejmować jQuery na swojej stronie internetowej z czymś takim:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script> 

Następnie w dowolnym tagu skrypt dolnym na stronie HTML, który powinien być w stanie zrobić coś takiego:

$.ajax({ 
    url: "data/users.json", 
    dataType: "json", 
    success: function(response) { 
    $.each(response.Users, function(item) { 
     informationArray.push(item); 
    }); 
    informationArray.push("success"); 
    } 
}); 

zobaczyć http://api.jquery.com/jQuery.ajax/

+0

Używam - //ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js - jquery-ui-1.8.17.custom.min.js Zmiana na 1.9.1/deaktywuj pozostałe funkcje. Czy to może być przyczyną tego, że tablica jest pusta? Dzięki. – user2333683

+0

Mało prawdopodobne. Możliwe, że otrzymujesz pustą tablicę, ponieważ twój obiekt JSON nie ma właściwości "items". Wygląda na to, że chcesz mieć własność "Użytkownicy". – olleicua

Powiązane problemy