json-данные с другого диска не загружаются в html-файл
Доброго времени суток всем!
Возникла проблема. Есть html таблица с ячейками и привязанными к ним id. По этим ячейкам нужно "раскидать" соответствующие данные, которые располагаются в файле формата json. При этом данные в файле json меняются раз в 1 секунду и файл с json-данными на сервере располагается на виртуальном диске Т, а html-таблица, скрипт и прочее - в папке root на локальном диске D. Я использую для динамической загрузки этих данных ajax от jQuery. Код скрипта такой: $(document).ready(function() { getJSON(); setInterval(getJSON, 1000); }); function getJSON() { $.getJSON( "T:\WEB\__data.XBO.json", function( data ) { $.each( data, function( key, val ) { $.each(val, function(k, v) { $('#' + key + '-' + k).addClass('alert-' + v.alert).text(v.value); }); }); }); } Если разместить json-файл на локальный диск D в папку root и указать в скрипте соответствующий путь к нему, то скрипт успешно срабатывает. Но когда я указываю путь вне папки root - на виртуальный диск T, либо на локальный диск C, либо локальный диск D (но вне папки root), то скрипт не срабатывает. Пользуюсь хромом. В консоле браузера вижу ошибку: XMLHttpRequest cannot load file:///T:/WEB__data.XBO.json. Cross origin requests are only supported for HTTP. Пробовал в других браузерах: IE, Firefox - аналогично. Подскажите, в чём может быть проблема и как её можно решить? |
EvgLuch,
Наверно хост привязан к начальному размещению html-файла Пробуйте переместить html-файл в корень диска с json (ну или в ту же папку, либо в родительскую |
Проблема в том, что диск с json не входит в диапазон Апатча... Диск виртуальный и размер его - 100 мб. Это сделано для того, что данные в json переписываются каждую секунду и если хранить этот json-файл на жёстком диске, то на этом жёстком через некоторое время "протрётся дырка" ))) Поэтому решено сделать поток данных в json-файле в оперативной памяти - на виртуальном диске. Можно разместить в этом виртуальном диске index.html, файл со скриптом, библиотеку jQuery и style.css, но при вводе адреса страницы браузер будет всё равно ссылаться на html в папке root локального диска D. Возможно тогда как-то поменять путь на html из папки root диска D на html из виртуального диска Т? И как? В настройках апатча? Может быть, в фале httpd.conf? :help:
|
А если просто сделать символическую ссылку? Я правда не уверен что апач ее будет резолвить (возможно это настраивается). Это как простейший вариант. А так уверен что можно апач настроить так как требуется (тут не подскажу).
Как костыль - разместить скрипт (php к примеру), который будет считывать нужный файл и выдавать ответ. Также хром можно запустить со специальным агрументом, который разрешит локальный кросс-запрос (гугли по своей ошибке - найдешь решение) |
EvgLuch,
1. поискать в инете драйвера, подключающие виртуальный диск как папку к текущему root 2.На счет дырки - один фиг, при каждой смене контента в HTML -кеш вашего HTML файла перезаписывается, а поскольку наверняка как-то изменяется соль в ссылке на файл скрипта с json, то кеш перезаписывается с той же скоростью и про дырку раз в секунду - всё это чушь - если конечно json не гигабайтный. В нормальной машине ежесекундно обновляется от 30 до 400 файлов, ксать сама операционка изначально подключает дисковое пространство для кеша в несколько гигабайт, и можно посмотреть динамику его использования, там речь явно не о секундах а о миллисекундах 3. Наверняка есть PHP скрипты проксирования - имитации удаленной загрузки, наподобие инет-подгрузки, а не локального хоста |
Решил проблему! В той же папке, где html-документ, скрипт, css и т.д. создал файл php со следующим простым скриптом:
<?php $data = file_get_contents ('T:\WEB\_data.XBO.json'); echo $data; ?> где 'T:\WEB\_data.XBO.json' - путь к тому самому json файлу, находящемуся на виртуальном диске, который не хотел грузить напрямую js скрипт. А в скрипте js в getJson указал путь на этот php файл: $(document).ready(function() { getJSON(); setInterval(getJSON, 1000); }); function getJSON() { $.getJSON( "ajax.php", function( data ) { $.each( data, function( key, val ) { $.each(val, function(k, v) { $('#' + key + '-' + k).addClass('alert-' + v.alert).text(v.value); }); }); }); } Для php нет таких проблем, как привязанность хоста. :) |
Часовой пояс GMT +3, время: 23:12. |