не работает метод 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>
Надеюсь что всё правильно оформил для темы. Подскажите пожалуйста, как запустить это в браузерах Хром и Опера |
|
Да, спасибо за ссылки данный метод мне известен, но он работает только с localhost, я же хотел обойтись без него.
|
Цитата:
то есть такое http://learn.javascript.ru/play/SjVTTb вам неподходит? |
Метод, что вы предлагаете мне не подходит, он подразумевает использование локального сервера, я бы хотел такой метод где не надо создавать сервер, а можно просто запустить страницы с жесткого диска
|
Антон C,
а JSON? |
Тоже нет к сожалению, он тоже использует метод responseText, а он ждет ответа от браузера, и если вызвать не через локальный сервер браузер ставит защиту от чтения данных ((((, все браузеры кроме Мозилы.
Мне советовали сделать через load вместо responseText, но load выдаёт непонятную ошибку, которую я не знаю как исправить |
Антон 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>
|
responseXML Опять же ,не уверен точно ли этот метод мешает браузеру но Опера и Хром без локального сервера не открывают данные, хотя в мозиле все работает , но в мозиле работали и все предыдущие методы
response вроде требует синхронного ответ браузера, поэтому без сервера он не работает |
похоже без локального сервера не обойтись(((
|
Внедряй нужные данные прямо на страницу. Или тебе прям кровь из носу нужен отдельный файл?
Хром по умолчанию не разрешает XMLHttpRequest запросы к файловой системе. Для разрешения нужно его (браузер) запустить с определенным флагом. |
Да, мне обязательно нужно в XML файле
|
Попробуйте использовать либу JQUERY. http://habrahabr.ru/post/42426/
|
Артем Левин, и чем она тут поможет?
То есть nativeFunction() // не работает Но если
function wrapper() {
nativeFunction(); // вдруг с чего-то начнет работать?
}
wrapper()
Какой в этом смысл? |
Чтобы не плодить темы присоединюсь к этой. Да и задача похожа.
Подскажите, как решить подобную задачу если файл не один. Пробовал вместо наименования подставить регулярное выражение - он не видит его - приходи null. |
Blacksmouker, где код. куда ты подставил регулярку. В чем заключается сходство твоей задачи?
Цитата:
|
Цитата:
Напрашивался парсер на php, но по техническим причинам необходимо это дело выполнить локально, без запросов к серверу прямо на машине клиента. От Xml в данном случае тоже не уйти - данные приходят именно в этом формате.
<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);
}
var file_name = /\d{7}.xml/g;
xmlDoc=loadXMLDoc(file_name);
document.write('<table class="warning" border="2px" bgcolor="silver">');
document.write('<tr align="center" bgcolor="gray">');
document.write('<td>Дата события</td>');
document.write('<td>Полное наименование</td>');
document.write('<td>Заголовок</td>');
document.write('</tr>');
for (i=0; i<xmlDoc.length; i++){
document.write('<tr>');
var x=xmlDoc.getElementsByTagName("EVENT_DATE");
var y=xmlDoc.getElementsByTagName("FULL_NAME_RUS");
var z=xmlDoc.getElementsByTagName("EVENT_HEADER");
document.write('<td>' + x[i].childNodes[0].nodeValue + '</td>');
document.write('<td>' + y[i].childNodes[0].nodeValue + '</td>');
document.write('<td>' + z[i].childNodes[0].nodeValue + '</td>');
document.write('<tr>');
}
document.write('</table>');
</script>
</body>
</html>
|
Регулярка тут явно не поможет. Если в IE есть возможность получить список файлов из папки - то это то, что нужно. Не спец по ActiveX, так что на этом моя помощь заканчивается.
|
| Часовой пояс GMT +3, время: 14:25. |