Ответ 1
Это известная проблема с Chrome.
Здесь ссылка в трекере ошибок:
Проблема 40787: Локальные файлы не загружаются с помощью Ajax
У меня есть очень простая тестовая страница, в которой используются запросы XHR с методами jQuery $.getJSON и $.ajax. Одна и та же страница работает в некоторых ситуациях, а не в других. Конкретно, он не работает в Chrome на Ubuntu.
Я тестирую Ubuntu 9.10 с бета-версией Chrome 5.0.342.7 и Mac OSX 10.6.2 с бета-версией Chrome 5.0.307.9.
Небольшой набор из 3 файлов можно загрузить в файле tar/gzip: http://issues.tauren.com/testjson/testjson.tgz
Когда он будет работать, консоль Chrome скажет:
XHR finished loading: "http://issues.tauren.com/testjson/data.json".
index.html:16Using getJSON
index.html:21
Object
result: "success"
__proto__: Object
index.html:22success
XHR finished loading: "http://issues.tauren.com/testjson/data.json".
index.html:29Using ajax with json dataType
index.html:34
Object
result: "success"
__proto__: Object
index.html:35success
XHR finished loading: "http://issues.tauren.com/testjson/data.json".
index.html:46Using ajax with text dataType
index.html:51{"result":"success"}
index.html:52undefined
Когда это не сработает, консоль Chrome покажет следующее:
index.html:16Using getJSON
index.html:21null
index.html:22Uncaught TypeError: Cannot read property 'result' of null
index.html:29Using ajax with json dataType
index.html:34null
index.html:35Uncaught TypeError: Cannot read property 'result' of null
index.html:46Using ajax with text dataType
index.html:51
index.html:52undefined
Обратите внимание, что он даже не показывает запросы XHR, хотя выполняется обработчик успеха. Клянусь, это работало ранее в Ubuntu/Chrome, и я волнуюсь, что что-то испортилось. Я уже удалил и переустановил Chrome, но это не помогло.
Может кто-нибудь попробовать его локально в вашей системе Ubuntu и сказать, есть ли у вас какие-либо проблемы? Обратите внимание, что он отлично работает в Firefox.
Это известная проблема с Chrome.
Здесь ссылка в трекере ошибок:
Проблема 40787: Локальные файлы не загружаются с помощью Ajax
Другой способ сделать это - запустить локальный HTTP-сервер в вашем каталоге. В Ubuntu и MacOs с установленным Python это однострочный.
Перейдите в каталог, содержащий ваши веб файлы, и:
python -m SimpleHTTPServer
Затем подключитесь к http://localhost:8000/index.html с любым веб-браузером, чтобы протестировать вашу страницу.
В Windows Chrome может быть установлен в папке AppData:
"C:\Users\\AppData\Local\Google\Chrome\Application"
Перед выполнением команды убедитесь, что все ваши окна Chrome закрыты и не работают в противном случае. Или параметр командной строки не будет эффективным.
chrome.exe --allow-file-access-from-files
Вы можете поместить ваш json в файл js и сохранить его в глобальной переменной. Он не является асинхронным, но может помочь.
@Mike В Mac введите его в Terminal:
open -b com.google.chrome --args --disable-web-security
Дополнительный способ обойти эту проблему заключается в использовании программной изолированной программной среды Flash Player Local Only и ExternalInterface. Можно запросить JavaScript, чтобы приложение Flash было опубликовано с помощью изолированной изолированной среды Local Only, чтобы загрузить файл с жесткого диска, и Flash может передать данные обратно на JavaScript через Flash ExternalInterface. Я тестировал это в Chrome, FF и IE9, и он работает хорошо. Я был бы рад поделиться этим кодом, если кому-то это интересно.
EDIT: Я начал проект google code (иронический?) для реализации: http://code.google.com/p/flash-loader/