Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Чтение xml средствами JavaScript (https://javascript.ru/forum/misc/45691-chtenie-xml-sredstvami-javascript.html)

pers_tmb 12.03.2014 11:51

Чтение xml средствами JavaScript
 
Добрый день!

Работаю в банке в далёкой от программирования сфере, но решил вспомнить молодость :) и реализовать один проект: интерактивная карта с важными географическими объектами.

Реализовывать приходится только средствами javascript. Для карты взял движок Lefleat. Но столкнулся со следующей проблемой: где хранить данные по географическим объектами (координаты, тип). Проштудировал интернет, так понял, что javascript'ом можно считывать расположенные на локальном диске xml-файлы.

Планирую, что результатом будут два файла (html и xml) на общем сетевом диске.

Но реализация, описанная тут http://xmlhttprequest.ru/ по какой-то причине не работает.

Вопрос: не работает она из-за корявости моих рук или из-за того, что данная технология позволяет читать xml только с сервера?
Подскажите, как из моей ситуации можно "выкрутиться"? :-?


PS в банке на большинстве компьютеров браузер IE8, но скорее всего будут обновлять скоро.

Aetae 12.03.2014 12:09

С javascript рекомендуется таки использовать json для данных. Гораздо удобнее.

Не работает же по второй причине. Если брать только ie, то оный может по своему работать с локальными файлами(FileSystemObject итп), но возможно потребуется специальная настройка разрешений.

P.S. Если сохранения данных не требуется - только загрузка, то имеет смысл не париться, а хранить их в отдельном js файле в формате jsonp.)

pers_tmb 12.03.2014 13:19

Спасибо! jsonp - очень даже подходящее решение!

Но по какой-то причине пример обработчика с этого сайта работает только в Firefox'e.. Есть ли способ чтения json файлов для IE?

<script  type="text/javascript" src="jquery-2.1.0.js"></script >
<script >

$(document).ready(function()
{    
	$.getJSON("name.js", function(data){
		alert(data.name);   
	});

});
</script >



Пример отсюда, если запускать локально, тоже работает только в Firefoxe. В чём может быть дело?

Aetae 12.03.2014 13:56

Вот всё мудрить норовят. Накой оно надо. Jsonp на деле это просто jasvascript файл.
<script>
function callback(data){
//ваш скрипт
}
</script>
<script src="jsonp-data.js"></script>

Пример: jsonp-data.js
callback({
    "name": "Zara Ali",
    "age" : "67",
    "sex": "female"
})

И всё.

$.getJSON - это тот же самый xmlhttp только в обёртке из jquery.

pers_tmb 12.03.2014 14:33

Aetae, спасибо!
Вопрос исчерпан :-)

pers_tmb 12.03.2014 16:21

Один вопрос исчерпан, другой возник. На этот раз проблема точно в корявости рук. :)

Есть вышеописанная конструкция.
<script>
function callback(data){
    //ваш скрипт
}
</script>
<script src="jsonp-data.js"></script>

В теле функции callback данными из jsonp-data.js можно оперировать как угодно. Но вывести эти данные за пределы тела функции не получилось.

А мне эти данные нужны в конструкции вроде
$().ready(function() {
	
});


Пробовал return'ом - по понятным причинам не работает.

Aetae 12.03.2014 16:36

Судя по всему по js знаний у вас совсем не много. Вам главное чтоб работало так понимаю. Тогда в лоб:
<script>
var d;
function callback(data){
    //ваш скрипт
    d = data;
}
</script>

pers_tmb 12.03.2014 16:51

Знаний действительно не хватает.
По непонятным для меня причинам, алерт внутри функции срабатывает исправно, а внешний алерт нет.
Хром пишет: "Uncaught TypeError: Cannot read property 'name' of undefined".
var d;
	function callback(data){
		d = data;
		alert(d.name+"1");
	}	
	alert(d.name);

рони 12.03.2014 17:07

так веть данные то ещё загрузились для 6 строки и 1 строка заполнится когда загрузится <script src="jsonp-data.js"></script>

содержание тогда
var d;
	function callback(data){
		d = data;
		alert(d.name+"1");
	}

jsonp-data.js
callback({
    "name": "Zara Ali",
    "age" : "67",
    "sex": "female"
});
alert(d.name);

Aetae 12.03.2014 18:26

pers_tmb,
Внутри .ready всё будет, для того ready и используют.


Часовой пояс GMT +3, время: 06:15.