2013-06-03 8 views
2

У меня есть следующие очень простой код, который просто читает файл в формате JSON:относительного и абсолютного пути в JavaScript

<html> 
<head> 
<meta charset="ISO-8859-1"> 
<title>JSON Test</title> 
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
<script> 
$(function() 
{ 
    alert (1); 
    $.getJSON('data/sample.json', function(json) 
    { 
     alert(2); 

    }); 
}); 
</script> 
</head> 
<body> 
    <div id="datadiv">This is the info: </div> 
</body> 
</html> 

я загрузить вышеуказанный файл на сервере Tomcat и может загрузить файл с помощью: http://myserver.com:8080/Html5_Test_1/jsonTest.html. Вышеупомянутый код работает, и вызывается предупреждение (2). Однако, если я изменю путь, который я использую для getJSON, в /Html5_Test_1/data/sample.json, он не будет работать.

Я думаю, что /Html5_Test_1/data/sample.json является абсолютным путем для data/sample.json и должен работать. На самом деле я пробовал /data/sample.json, Html5_Test_1/data/sample.json, и никто не работает. Единственный путь, который работает, - data/sample.json.

Может ли кто-нибудь сказать мне, что не так? Абсолютный путь /Html5_Test_1/data/sample.json, безусловно, будет работать на Java. Итак, понятие абсолютного и относительного пути немного отличается от JavaScript?

Обратите внимание, что к файлу обращаются как открытый файл на сервере, а не как файл в локальной файловой системе.

+0

Вы подтвердили, набрав адрес непосредственно в строке URL браузера (http: // localhost: 8080/Html5_Test_1/data/sample.json)? Если вы посмотрите на вкладке сети инструментов разработчика браузера, какой URL-адрес он пытается загрузить? – JJJ

+0

Да, я подтвердил, что файл можно загрузить с помощью localhost: 8080/Html5_Test_1/data/sample.json. – user1888243

+0

Хорошо, вы можете проверить фактическое содержимое запроса 'GET', когда вы указываете'/Html5_Test_1/data/sample.json'' в качестве URL-адреса? И сравните эту строку с той, которую отправил запрос '' data/sample.json''. – raina77ow

ответ

1

Оба данных/sample.json и /Html5_Test_1/data/sample.json должны работать отлично. Я думаю, что у вас проблемы с кешем браузера. Очистите кеш браузера и повторите попытку.

Если это не сработает, попробуйте другой браузер. Я не вижу никакой ситуации, когда указанные выше пути не будут работать, если ваш кеш браузера не испорчен.

1

Вы, кажется, смешиваете абсолютные/относительные пути файловой системы и абсолютные/относительные URL-адреса. Помните, что JavaScript - это клиентский язык, он не имеет ничего общего с файловой системой сервера, на которой размещена главная страница. Поэтому вы предпочитаете относительный URL-адрес, принимая во внимание, что его отправной точкой, скорее всего, будет путь обслуживаемого файла.

Но почему это работает сейчас, вы можете спросить? Проверьте это:

/Html5_Test_1/ 
.. data/ 
.... sample.json 
.. jsonTest.html 

... и помните, URL будет рассматриваться как связанные с каталога, который содержит jsonTest.html файл. Легко понять, почему правильный относительный путь равен data/sample.json (или './data/sample.json').

Если вы хотите, вы можете изменить свой код, чтобы что-то вроде этого ...

$.getJSON('file:///Html5_Test_1/data/sample.json', function(json) ...); 

... но это, очевидно, сделает его непригодным для использования на любой другой машине, чем ваша.

+0

Я не думаю, что вы можете загружать файлы из локальной файловой системы с помощью AJAX даже на свой компьютер. – JJJ

+0

Хотя сервер, очевидно, находится на локальном хосте, но файл sample.json обращается как файл на сервере, а не как файл в локальной файловой системе. – user1888243

+0

@Juhana Да, даже это ограничено в некоторых браузерах (Chrome). Эти ограничения могут быть отменены, но это не главное: я попытался показать разницу между путями файловой системы и URL-адресами. – raina77ow

Смежные вопросы