Проблемы с jQuery getJSON с использованием локальных файлов в Chrome

У меня есть очень простая тестовая страница, в которой используются запросы XHR с методами jQuery $.getJSON и $.ajax. Одна и та же страница работает в некоторых ситуациях, а не в других. Конкретно, он не работает в Chrome на Ubuntu.

Я тестирую Ubuntu 9.10 с бета-версией Chrome 5.0.342.7 и Mac OSX 10.6.2 с бета-версией Chrome 5.0.307.9.

  • Он работает правильно, когда файлы установлены на веб-сервере как из Ubuntu/Chrome, так и для Mac/Chrome (попробуйте здесь).
  • Он работает правильно, когда файлы установлены на локальном жестком диске в Mac/Chrome (доступ к файлу:///...).
  • FAILS, когда файлы установлены на локальном жестком диске в Ubuntu/Chrome (доступ с файлом:///...).

Небольшой набор из 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.

Ответ 2

Другой способ сделать это - запустить локальный HTTP-сервер в вашем каталоге. В Ubuntu и MacOs с установленным Python это однострочный.

Перейдите в каталог, содержащий ваши веб файлы, и:

python -m SimpleHTTPServer

Затем подключитесь к http://localhost:8000/index.html с любым веб-браузером, чтобы протестировать вашу страницу.

Ответ 3

В Windows Chrome может быть установлен в папке AppData:

"C:\Users\\AppData\Local\Google\Chrome\Application"

Перед выполнением команды убедитесь, что все ваши окна Chrome закрыты и не работают в противном случае. Или параметр командной строки не будет эффективным.

chrome.exe --allow-file-access-from-files

Ответ 4

Вы можете поместить ваш json в файл js и сохранить его в глобальной переменной. Он не является асинхронным, но может помочь.

Ответ 5

@Mike В Mac введите его в Terminal:

open -b com.google.chrome --args --disable-web-security

Ответ 6

Дополнительный способ обойти эту проблему заключается в использовании программной изолированной программной среды 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/