Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   json-данные с другого диска не загружаются в html-файл (https://javascript.ru/forum/misc/42515-json-dannye-s-drugogo-diska-ne-zagruzhayutsya-v-html-fajjl.html)

EvgLuch 30.10.2013 05:37

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 - аналогично.
Подскажите, в чём может быть проблема и как её можно решить?

Deff 30.10.2013 05:46

EvgLuch,
Наверно хост привязан к начальному размещению html-файла
Пробуйте переместить html-файл в корень диска с json (ну или в ту же папку, либо в родительскую

EvgLuch 30.10.2013 07:51

Проблема в том, что диск с json не входит в диапазон Апатча... Диск виртуальный и размер его - 100 мб. Это сделано для того, что данные в json переписываются каждую секунду и если хранить этот json-файл на жёстком диске, то на этом жёстком через некоторое время "протрётся дырка" ))) Поэтому решено сделать поток данных в json-файле в оперативной памяти - на виртуальном диске. Можно разместить в этом виртуальном диске index.html, файл со скриптом, библиотеку jQuery и style.css, но при вводе адреса страницы браузер будет всё равно ссылаться на html в папке root локального диска D. Возможно тогда как-то поменять путь на html из папки root диска D на html из виртуального диска Т? И как? В настройках апатча? Может быть, в фале httpd.conf? :help:

danik.js 30.10.2013 09:02

А если просто сделать символическую ссылку? Я правда не уверен что апач ее будет резолвить (возможно это настраивается). Это как простейший вариант. А так уверен что можно апач настроить так как требуется (тут не подскажу).
Как костыль - разместить скрипт (php к примеру), который будет считывать нужный файл и выдавать ответ.

Также хром можно запустить со специальным агрументом, который разрешит локальный кросс-запрос (гугли по своей ошибке - найдешь решение)

Deff 30.10.2013 09:27

EvgLuch,
1. поискать в инете драйвера, подключающие виртуальный диск как папку к текущему root

2.На счет дырки - один фиг, при каждой смене контента в HTML -кеш вашего HTML файла перезаписывается, а поскольку наверняка как-то изменяется соль в ссылке на файл скрипта с json, то кеш перезаписывается с той же скоростью и про дырку раз в секунду - всё это чушь - если конечно json не гигабайтный. В нормальной машине ежесекундно обновляется от 30 до 400 файлов, ксать сама операционка изначально подключает дисковое пространство для кеша в несколько гигабайт, и можно посмотреть динамику его использования, там речь явно не о секундах а о миллисекундах

3. Наверняка есть PHP скрипты проксирования - имитации удаленной загрузки, наподобие инет-подгрузки, а не локального хоста

EvgLuch 31.10.2013 09:39

Решил проблему! В той же папке, где 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.