it-swarm.com.ru

Проблемы с 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 (доступ с помощью файла: /// ...).
  • ЗАВЕРШАЕТСЯ С ОШИБКОЙ, когда файлы устанавливаются на локальный жесткий диск в 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 он работает нормально.

48
Tauren

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

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

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

30
Daniel Furrer

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

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

python -m SimpleHTTPServer

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

38
Sébastien RoccaSerra

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

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

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

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

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

3
Zdeněk Mlčoch

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

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

Этот код прекрасно работал с sheet.jsonlocally с синхронизацией браузера в качестве локального сервера. - Но когда на своем удаленном сервере я получил 404 для файла sheet.json, используя Chrome . Он хорошо работал в Safari и Firefox .- Изменил имя sheet.json на sheet.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
Luke Dohner

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

Правка: Я начал проект Google Code (иронично?) Для реализации: http://code.google.com/p/flash-loader/

1
CommissarXiii