Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как загрузить xml из вышележащей директории без обращения к серверу? (https://javascript.ru/forum/misc/17090-kak-zagruzit-xml-iz-vyshelezhashhejj-direktorii-bez-obrashheniya-k-serveru.html)

Parez 05.05.2011 15:08

Как загрузить xml из вышележащей директории без обращения к серверу?
 
Нужно загрузить данные из внешнего xml, расположенного в той же папке (или выше), откуда запущено JS приложение. Насколько я понял, XMLHttpRequest позволяет загружать файлы только через обращение к серверу. Можно ли как-нибудь загрузить данные из файла без помощи сервера?

Lucidmind 05.05.2011 17:36

Немного непонятно... xml находится на клиентской машине или на web-сервере?

walik 05.05.2011 17:43

Вроде на клиентской машин. По моему никак нельзя.

Magneto 05.05.2011 18:24

Можно.

В случае если это обычная страница. Файл нужно открыть во фрейме и после получить необходимые данные с этого фрейма.

Но если это именно приложение, виджет, гаджет или hta-апликация, то там есть встроенные методы для работы с локальными файлами.

walik 05.05.2011 18:36

Цитата:

Сообщение от Magneto
Файл нужно открыть во фрейме и после получить необходимые данные с этого фрейма

Я как то пробовал так сделать. Он выдал ту же ошибку что и получается когда получаешь данные с фрейма чужой страницы. Он тоже думает что будто разные домены.

monolithed 05.05.2011 19:20

Цитата:

Сообщение от Parez
Нужно загрузить данные из внешнего xml

примерно (еще есть нюансы с оперой) так:

function loadXML(import_file) {
	if(typeof ActiveXObject != 'undefined') {
		var version = ['Microsoft.XML', 
						'MSXML2.DOMDocument',
						'MSXML2.DOMDocument.3.0',
						'MSXML2.DOMDocument.4.0',
						'MSXML2.DOMDocument.5.0',
						'MSXML2.DOMDocument.6.0'
						], 
			i = version.length, XMLObject;
		while(i--) {
			XMLObject = new ActiveXObject(version[i]);
		}
		
		XMLObject.onreadystatechange = function () {
			if(XMLObject.readyState == 4) {
				/* ... */
			}
			XMLObject.load(import_file);
		}
	}
	else if(document.implementation && document.implementation.createDocument) {
		var XMLObject = document.implementation.createDocument('','',null);
			XMLObject.load(import_file);
			XMLObject.onload = function() {
				/* ... */
			};
	}
	else {
		alert('Your browser doesn\'t support this object');
		return false;
	}
}

Parez 05.05.2011 21:06

monolithed, то, что вы написали не требует обращения к серверу?

И потом я слышал, что ActiveXObject работает только в IE. А для остальных используется XMLHttpRequest.

monolithed 05.05.2011 21:35

Цитата:

Сообщение от Parez
то, что вы написали не требует обращения к серверу?

я не понимаю сути вопроса, по вашему подгружаемый файл должен материализоваться из воздуха?
в вашем случае, нужно заместо import_file указать путь к файлу и вызвать функцию (ну и допилить код в плане реализации и парсинга документа)
Цитата:

Сообщение от Parez
И потом я слышал, что ActiveXObject работает только в IE. А для остальных используется XMLHttpRequest.

прочтите внимательно код, а лучше документацию по работе с этими объектами и примеры использования

Parez 06.05.2011 11:15

Цитата:

Сообщение от monolithed
я не понимаю сути вопроса, по вашему подгружаемый файл должен материализоваться из воздуха?

Я, если честно, не совсем понимаю устройства JS. 2 года программировал на AS3 и таких проблем не возникало. Flash'у наплевать как ты его запускаешь: со своего же компьютера или с сервера - он всегда может загружать в себя данные, находящиеся в той же директории или выше. JS тоже клиентский язык, так в чём же проблема?

monolithed 06.05.2011 13:26

Цитата:

Сообщение от Parez
JS тоже клиентский язык, так в чём же проблема?

нет никаких проблем, JS тоже:
Цитата:

Сообщение от Parez
всегда может загружать в себя данные, находящиеся в той же директории или выше.

точнее работать с данными.
Что вы делаете может расскажите?


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