2013-06-07 16 views
13

Utknąłem, próbując uzyskać poprawną ścieżkę do pliku lokalnego. Mam następujące katalogi:Ścieżka pliku analizy pliku JSON

Resources -> 
    data -> 
     file.json 
    js -> 
    folder -> 
     script.js 
    html -> 
     folder -> 
     file1.html 

jestem realizujących script.js od file1.html, z kodem JS:

var answers = JSON.parse('../../data/file.json'); 
alert(answers); 

Ale to nie działa, nawet nie uruchamia się alarm. Co jest nie tak?

Również próbowałem to:

function readJSON(file) { 
    var request = new XMLHttpRequest(); 
    request.open('GET', file, false); 
    request.send(null); 
    if (request.status == 200) 
     return request.responseText; 
}; 

var temp = readJSON('../../data/file.json'); 
alert(temp); 

Alert niezdefiniowane w niniejszym przypadku.

+0

'Alert nieokreślony dla mnie." Jaki był "status", czy spowodował błąd w twojej konsoli? –

+0

Wreszcie, 'if (request.status == 200)' spowodowało problemy dla mnie. Daje 0, nawet jeśli znajdzie plik. Po usunięciu wszystko jest w porządku. Dziękuje wszystkim! – jagger

Odpowiedz

26

Ponieważ jest w katalogu data/, trzeba zrobić:

ścieżka pliku jest '../../data/file.json'

$.getJSON('../../data/file.json', function(data) {   
    alert(data); 
}); 

Czyste JS:

var request = new XMLHttpRequest(); 
    request.open("GET", "../../data/file.json", false); 
    request.send(null) 
    var my_JSON_object = JSON.parse(request.responseText); 
    alert (my_JSON_object.result[0]); 
+0

Nie zdawałem sobie sprawy, że możesz przekazać _URI_ do 'JSON.parse' i zlecić wykonanie" ŻĄDANIA ", gdzie jest to udokumentowane? –

+0

Tak, brakowało mi tego w pytaniu ścieżki. w każdym razie, to nie działa ... – jagger

+0

tak .. edytuj był w drodze .. domysły powinny odpowiedzieć po fakcie – karthikr

0

Jeśli Resources jest ścieżka korzeń, najlepiej sposób dostępu do file.json będzie przez /data/file.json

+0

W rzeczywistości robię to w widoku webowym tytanu, więc zwykle zasoby powinny być ścieżkami root. Jeśli zrobię document.location.pathname i zacznę w przeglądarce, na pewno otrzymam plik: /// ... – jagger

3

Loading local JSON file

Zastosowanie coś takiego

$.getJSON("../../data/file.json", function(json) { 
    console.log(json); // this will show the info in firebug console 
    alert(json); 
}); 
+3

jak już wskazałem, potrzebuję w czystej js – jagger

6

Takie rozwiązanie wykorzystuje asynchroniczne wywołanie. Prawdopodobnie zadziała lepiej niż rozwiązanie synchroniczne.

var request = new XMLHttpRequest(); 
request.open("GET", "../../data/file.json", false); 
request.send(null); 
request.onreadystatechange = function() { 
    if (request.readyState === 4 && request.status === 200) { 
    var my_JSON_object = JSON.parse(request.responseText); 
    console.log(my_JSON_object); 
    } 
} 
+0

Witaj w SO. Dobra odpowiedź. Edytowałem to, ponieważ najlepiej, gdy odpowiedź jest samodzielna. Dialog o innych odpowiedziach jest odpowiedni w komentarzach. –

+0

Synchroniczne XMLHttpRequest na głównym wątku jest przestarzałe ze względu na jego szkodliwe skutki dla użytkownika końcowego. Aby uzyskać dodatkową pomoc, sprawdź http://xhr.spec.whatwg.org/. – Evorlor

+3

@Evorlor Zmień wartość false w wierszu 2 na true. W przeciwnym razie jest to operacja synchroniczna. – Todd