Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: XMLHttpRequest и разбор html страницы
 
 автор: Prihod   (23.04.2007 в 21:44)   письмо автору
 
 

С помощью XMLHttpRequest произвожу фоновую загрузку html страницы некого сайта с подошью следящего кода пытаюсь извлечь к примеру количество ссылок на скачиваемой страницы

if (req.readyState ==4)
{
  if (req.status == 200)
    {
     var element=req.responseXML.documentElement;
     var linc =element.getElementsByTagName('a');
     var count = linc.length;
     alert(count);


    }
     else {
     alert("Не удалось получить данные);
          }
}

но при выполнении скрипта получаю сообщение что переменная «linc» равна null, хотя если просмотреть данные при помощи alert(req.responseText) то ссылки в скачиваемом документе есть. Где бок ??

   
 
 автор: XPraptor   (24.04.2007 в 02:03)   письмо автору
 
   для: Prihod   (23.04.2007 в 21:44)
 

Пробуй несколько вариантов:
замени тэг на большую букву - getElementsByTagName("A");
И по моему documentElement это корневой DOM объект XML, а не Document HTML.
Пробуй так:
var element=req.responseBody;

   
 
 автор: coloboc66   (24.04.2007 в 10:21)   письмо автору
 
   для: XPraptor   (24.04.2007 в 02:03)
 

По-моему вот здесь:
var element=req.responseXML.documentElement;
не нужно использовать documentElement;
Нужно так:
var element=req.responseXML;

   
 
 автор: Prihod   (24.04.2007 в 12:32)   письмо автору
 
   для: XPraptor   (24.04.2007 в 02:03)
 

При использовании var element=req.responseBody; ничего не изменилось, а при

var element=req.responseXML
var a=element.getElementsByTagName('A');
var count =a.length;
alert(count);

значение count равно 0 хотя там куча ссылок

   
 
 автор: coloboc66   (24.04.2007 в 13:56)   письмо автору
 
   для: Prihod   (24.04.2007 в 12:32)
 

А регистр тегов в ответе сервера (А и а) совпадает с регистром в строке
var a=element.getElementsByTagName('A');
?
И еще: насколько я знаю, аякс запрещает работу с файлами с чужих хостов.

   
 
 автор: XPraptor   (24.04.2007 в 16:38)   письмо автору
 
   для: coloboc66   (24.04.2007 в 13:56)
 

Тебе придется создать в скрипте виртуальный объект Document. Так как ты сейчас не можешь получить ссылку на объект Document, а без этого нельзя использовать DOM модель getElementsByTagName.

var newdoc=createelement("DOCUMENT");
newdoc.body.innerHtml=responseXML; //или responseBody

а вот теперь можно newdoc использовать как объект Document. Единственное, не смотрел точно синтаксис createElement, глянь сам в DHTML и создай объект.

   
 
 автор: coloboc66   (24.04.2007 в 16:56)   письмо автору
 
   для: XPraptor   (24.04.2007 в 16:38)
 

Если получится, дайте знать, мне тоже интересно.

   
 
 автор: RMW   (24.04.2007 в 20:04)   письмо автору
 
   для: Prihod   (23.04.2007 в 21:44)
 

Можно как-нибудь так:
IE only

<html>
<head>
<script>
onload = function()
{
  var url = "http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=36420&page=1"
  var req = new ActiveXObject('Microsoft.XMLHTTP');
  req.open('GET', url, false); 
  req.send(null);
  var d = frames[0].document;
  d.write(req.responseText);
  alert("кол-во ссылок: "+d.links.length);
  var a = [];
  for(var i=0;i<d.links.length;i++)a.push(d.links[i].href);
  document.getElementById('myDiv').innerHTML=a.join('<br>');
}
</script>
</head>
<body>
<iframe src="about:blank" height="0"></iframe>
<div id="myDiv"></div>
</body>
</html>

   
 
 автор: Prihod   (25.04.2007 в 19:46)   письмо автору
 
   для: RMW   (24.04.2007 в 20:04)
 

Пример RMW работает , а XPraptor нет , т.к функцией createElement и createelement не получается создать виртуальный объект Document, хотя вариант с виртуальный объект Document мне больше нравиться, может кто знает как его можно создать ? И где модно найти хороший справочник или книгу по DHTML в электронном виде и на русском

   
 
 автор: coloboc66   (28.04.2007 в 11:54)   письмо автору
 
   для: Prihod   (25.04.2007 в 19:46)
 

В общем-то, вопрос сводится к простому: как получить доступ к XML-док-ту, закружаемому в броузер, с помощью responseXML, с тем, чтобы далее разбирать этот документ ява-скриптом? Кто-нибудь может ответить конкретно?

   
 
 автор: RMW   (28.04.2007 в 12:58)   письмо автору
 
   для: coloboc66   (28.04.2007 в 11:54)
 

Ответить может тот, кто знает, что HTML!=XML.

   
 
 автор: bronenos   (28.04.2007 в 13:47)   письмо автору
 
   для: coloboc66   (28.04.2007 в 11:54)
 

Для оперы - просто работать, как с XML объектом, для ие:
var obj = new ActiveXObject ('Microsoft.XMLDOM');
obj.async = false;
obj.loadXML (xml);

где xml - это xml-объект

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования