Проблемы с jQuery getJSON при использовании локальных файлов в Chrome - PullRequest
48 голосов
/ 30 марта 2010

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

Я тестирую Ubuntu 9.10 с Chrome 5.0.342.7 beta и Mac OSX 10.6.2 с Chrome 5.0.307.9 beta.

  • Он работает правильно, когда файлы установлены на веб-сервере из 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 он работает нормально.

Ответы [ 7 ]

38 голосов
/ 03 мая 2011

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

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

python -m SimpleHTTPServer

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

30 голосов
/ 07 мая 2010

Это известная проблема с Chrome.

Вот ссылка в трекере ошибок:

Проблема 40787: локальные файлы не загружаются с Ajax

13 голосов
/ 17 ноября 2010

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

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

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

chrome.exe --allow-file-access-from-files
3 голосов
/ 31 января 2013

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

1 голос
/ 07 февраля 2018

Этот код прекрасно работал с sheet.jsonlocally с синхронизацией браузера в качестве локального сервера.-Но когда на моем удаленном сервере я получил 404 для файла sheet.json, используя Chrome.Это хорошо работало в Safari и Firefox.-Изменил имя листа.json на лист.JSON.Тогда это работало на удаленном сервере.У кого-нибудь еще есть такой опыт?

getthejason = function(){
var dataurl = 'data/sheet.JSON';
var xhr = new XMLHttpRequest();
xhr.open('GET', dataurl, true);
xhr.responseType = 'text';
xhr.send();
console.log('getthejason!');

xhr.onload = function() {
.....
}
1 голос
/ 10 мая 2011

Еще один способ обойти эту проблему - использовать локальную изолированную программную среду безопасности Flash Player и методы ExternalInterface. С помощью JavaScript можно запросить приложение Flash, опубликованное с использованием изолированной программной среды безопасности «Только локальный», чтобы загрузить файл с жесткого диска, и Flash может передать данные обратно в JavaScript с помощью класса ExternalInterface Flash. Я проверил это в Chrome, FF и IE9, и это работает хорошо. Я был бы рад поделиться кодом, если кому-то интересно.

РЕДАКТИРОВАТЬ: Я начал проект Google Code (ирония?) Для реализации: http://code.google.com/p/flash-loader/

1 голос
/ 08 мая 2010

@ Mike На Mac введите это в Терминале:

open -b com.google.chrome --args --disable-web-security
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...