Javascript HTTP GET HTML / текст, возвращающий ноль / пусто? - PullRequest
0 голосов
/ 20 июля 2010

Я пытаюсь получить HTML-код сайта, используя этот код:

 function catchData(req) {
   console.debug("i got a reply!");
   var returnXML = req.responseXML;
   console.debug(returnXML);
   if (!returnXML)
   {
    console.debug("html is bad");
    return;
   }
   if (speed != currentSpeed)
    moveToNewSpeed(speed);
   currentSpeed = speed;
   var error = returnXML.getElementsByTagName('message')[0].firstChild;
   if (error) {
    document.getElementById('errorMessage').innerHTML = error.nodeValue;
    document.getElementById('errorMessage').style.visibility = 'visible';
   }
   else
    document.getElementById('errorMessage').style.visibility = 'hidden';
   }

 function sendRequest(url,callback,postData) {
   console.debug(url);
   console.debug(postData);
   var req = createXMLHTTPObject();
   if (!req) return;
   var method = (postData) ? "POST" : "GET";
   console.debug(method);
   req.open(method,url,true);
   console.debug("request Opened");
   req.setRequestHeader('User-Agent','XMLHTTP/1.0');
   req.setRequestHeader('User-Agent','XMLHTTP/1.0');
   if (postData)
   {
    req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    console.debug("set post data");
   }
   req.onreadystatechange = function () {
    if (req.readyState != 4)
    {  
     console.debug("bad ready state");
     return;
    }
    console.debug(req);
    console.debug("responseText:");
    console.debug(req.responseText);
    callback(req);
    console.debug("callback finished");
   }
   if (req.readyState == 4) return;
   req.send(postData);
  }

var XMLHttpFactories = [
 function () {return new XMLHttpRequest()},
 function () {return new ActiveXObject("Msxml2.XMLHTTP")},
 function () {return new ActiveXObject("Msxml3.XMLHTTP")},
 function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
 var xmlhttp = false;
 for (var i=0;i<XMLHttpFactories.length;i++) {
  try {
   xmlhttp = XMLHttpFactories[i]();
  }
  catch (e) {
   continue;
  }
  break;
 }
 return xmlhttp;
}

Когда я делаю захват с помощью wireshark, я вижу, что сервер возвращает html, но req.responseText - просто пустая строка. Кто-нибудь знает, что случилось?

Ответы [ 3 ]

1 голос
/ 20 июля 2010

Полагаю, вы пытаетесь получить HTML-код страницы, которая находится в другом домене, чем ваш JavaScript.Это междоменный запрос, который не разрешен в Javascript.Обычно это воспринимается как пустой ответ в вашем скрипте.

Стандарт JSONP описывает механизм извлечения JSON из другого домена, но его необходимо реализовать на другом сайте и не* работать с HTML.

Yahoo!Язык запросов (YQL) может выступать в качестве прокси.Yahoo!Сервер извлечет HTML и создаст ответ JSONP, который получит ваш скрипт.Это может помочь вам в достижении вашей цели.В YQL есть много интересных функций для извлечения контента с других сайтов, я рекомендую вам прочитать документацию, чтобы узнать, есть ли что-нибудь еще, что вы можете использовать.

0 голосов
/ 20 июля 2010

Есть ли причина, по которой вы пишете этот код самостоятельно, а не используете такую ​​библиотеку, как jQuery? Вы поймете, что это намного проще, и они уже выяснили все связанные с этим особенности взаимодействия с браузером и т. Д.

0 голосов
/ 20 июля 2010

откуда исполняется JavaScript?У вас есть нарушение политики того же происхождения?

Я спрашиваю, потому что я видел странность в таких ситуациях, когда я нарушал политику, но запрос все еще выполнялся;просто ответ был пустым ... не имеет никакого смысла, что браузер отправил бы запрос, но они все обрабатывают это по-разному, кажется ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...