2013-06-07 74 views
13

Tôi đang cố gắng tìm đường dẫn chính xác đến tệp cục bộ. Tôi có các thư mục sau:Đường dẫn tệp JSON Parse

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

tôi đang thực hiện script.js từ file1.html, với mã js:

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

Nhưng nó không hoạt động, thậm chí cảnh báo không được bắt đầu. Có gì sai?

Ngoài ra tôi đã thử điều này:

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 undefined trong trường hợp này.

+0

'Cảnh báo không xác định cho tôi.', trạng thái' là gì, nó có tạo ra lỗi trong _console_ của bạn không? –

+0

Cuối cùng, 'if (request.status == 200)' tạo ra các vấn đề cho tôi. Nó cho 0 ngay cả khi nó tìm thấy tập tin. Nếu tôi xóa nó, tất cả đều ổn. Cảm ơn tất cả mọi người! – jagger

Trả lời

26

Vì nó là trong thư mục data/, Bạn cần phải làm:

đường dẫn tập tin là '../../data/file.json'

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

JS tinh khiết:

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

Tôi không nhận ra rằng bạn có thể chuyển một _URI_ thành 'JSON.parse' và yêu cầu nó thực hiện' REQUEST' cho bạn, tài liệu này ở đâu? –

+0

yep, bỏ lỡ câu hỏi này trong đường dẫn. dù sao, nó không hoạt động ... – jagger

+0

yeah .. chỉnh sửa được trên đường .. đoán nên đã trả lời sau khi thực tế – karthikr

0

Nếu Resources là đường dẫn gốc, tốt nhất cách truy cập file.json sẽ thông qua /data/file.json

+0

Trên thực tế, tôi làm cho nó trong titan webview, vì vậy thường nguồn lực nên đường dẫn gốc. Nếu tôi làm document.location.pathname và bắt đầu trong trình duyệt của tôi sẽ chắc chắn có được file: /// ... – jagger

3

Loading local JSON file

Sử dụng một cái gì đó như thế này

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

như tôi đã chỉ ra, tôi cần trong js tinh khiết – jagger

6

giải pháp này sử dụng một cuộc gọi không đồng bộ. Nó có khả năng sẽ hoạt động tốt hơn một giải pháp đồng bộ.

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

Chào mừng bạn đến SO. Câu trả lời tốt. Tôi chỉnh sửa nó bởi vì nó là tốt nhất khi một câu trả lời đứng một mình. Đối thoại về các câu trả lời khác là thích hợp trong các bình luận. –

+0

XMLHttpRequest đồng bộ trên chuỗi chính không được chấp nhận vì các hiệu ứng bất lợi của nó đối với trải nghiệm của người dùng cuối. Để được trợ giúp thêm, hãy kiểm tra http://xhr.spec.whatwg.org/. – Evorlor

+3

@Evorlor Thay đổi false trên dòng 2 thành true. Nếu không, đó là một hoạt động đồng bộ. – Todd