не работает метод 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, время: 08:05. |