Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   не работает метод load(); в DOM (https://javascript.ru/forum/events/45992-ne-rabotaet-metod-load-%3B-v-dom.html)

Антон C 23.03.2014 22:41

не работает метод load(); в DOM
 
Всем привет, захотел с помощью DOM взять данные из XML и передать их на HTML страницу, данный метод сработал в Мозиле и IE, и не сработал в Хроме и Опере.

XML файл (1.xml):

<?xml version="1.0" encoding="utf-8"?>
<bulletinboard>
	<article>
		<title>FFFFFF</title>
		<detail>DDDDD</detail>
		<date>IIIIII</date>
	</article>
</bulletinboard>


HTML страница c DOM (2.html):

<html>
	<head>
		<meta charset="utf-8"/>
	</head>
	<body>
	<script type="text/javascript"> 
		function loadXMLDoc(dname) 
		{
			try
  			{
  			xmlDoc=new ActiveXObject("Microsoft.XMLDOM");	
			}
			catch(e)	
			{
  				try 
    				{
xmlDoc=document.implementation.createDocument("","",null);
    				}
  				catch(e) {alert(e.message)}
  			}
			try 
  			{xmlDoc
 				xmlDoc.async=false;
  				xmlDoc.load(dname);
  				return(xmlDoc);
  			}
			catch(e) {alert(e.message)}
			return(null);
		}
		xmlDoc=loadXMLDoc("./1.xml");
		var x=xmlDoc.getElementsByTagName("title");
		var y=xmlDoc.getElementsByTagName("detail");
		var z=xmlDoc.getElementsByTagName("date");

		for (i=0;i<x.length;i++)
  		{ 
 			document.write(x[i].childNodes[0].nodeValue); 
  			document.write(y[i].childNodes[0].nodeValue);
  			document.write(z[i].childNodes[0].nodeValue);
  		}
	</script>
	</body>
</html>


Надеюсь что всё правильно оформил для темы.

Подскажите пожалуйста, как запустить это в браузерах Хром и Опера

рони 23.03.2014 23:15

Антон C,
http://learn.javascript.ru/ajax-xmlh...и-responsexml

http://yapro.ru/web-master/javascrip...xml-fayla.html

Антон C 23.03.2014 23:25

Да, спасибо за ссылки данный метод мне известен, но он работает только с localhost, я же хотел обойтись без него.

рони 23.03.2014 23:46

Цитата:

Сообщение от Антон C
Да, спасибо за ссылки данный метод мне известен, но он работает только с localhost, я же хотел обойтись без него.

непонял что вы написали ...

то есть такое http://learn.javascript.ru/play/SjVTTb вам неподходит?

Антон C 24.03.2014 01:13

Метод, что вы предлагаете мне не подходит, он подразумевает использование локального сервера, я бы хотел такой метод где не надо создавать сервер, а можно просто запустить страницы с жесткого диска

рони 24.03.2014 01:47

Антон C,
а JSON?

Антон C 24.03.2014 02:01

Тоже нет к сожалению, он тоже использует метод responseText, а он ждет ответа от браузера, и если вызвать не через локальный сервер браузер ставит защиту от чтения данных ((((, все браузеры кроме Мозилы.
Мне советовали сделать через load вместо responseText, но load выдаёт непонятную ошибку, которую я не знаю как исправить

рони 24.03.2014 02:07

Антон C, а так? :write:
<!DOCTYPE HTML>

<html>

<head>

  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  #example-1{
    text-align: center;
    cursor: pointer;
  }

  </style>
  <link rel="stylesheet" type="text/css" href="style.css"/>
</head>

<body>



<div class="example cursor" id="example-1">Click to update</div>
<script>
function loadElement(url, callback) {
    var request = new XMLHttpRequest();
    try{
    request.open('GET', url);
    request.send(null);
    request.onreadystatechange = function() {
        if (this.readyState == 4)
            callback(this.responseXML);
    };
  } catch(e) {
    request = new ActiveXObject("Microsoft.XMLDOM");
    request.load(url);
    callback(request)
  }


}
var div =  document.getElementById('example-1');
div.onclick = function ()
{
  loadElement('./1.xml', function(xmlDoc) {
  var x=xmlDoc.getElementsByTagName("title");
		var y=xmlDoc.getElementsByTagName("detail");
		var z=xmlDoc.getElementsByTagName("date");
var html = ''
		for (i=0;i<x.length;i++)
  		{
 			html +=x[i].childNodes[0].nodeValue;
  			html +=y[i].childNodes[0].nodeValue;
  			html +=z[i].childNodes[0].nodeValue;
  		}
  div.innerHTML =  html
})
}
;
</script>

</body>

</html>

Антон C 24.03.2014 02:14

responseXML Опять же ,не уверен точно ли этот метод мешает браузеру но Опера и Хром без локального сервера не открывают данные, хотя в мозиле все работает , но в мозиле работали и все предыдущие методы

response вроде требует синхронного ответ браузера, поэтому без сервера он не работает

Антон C 24.03.2014 02:15

похоже без локального сервера не обойтись(((


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