Простой XMLHttpRequest (Google Weather) - PullRequest
0 голосов
/ 20 июня 2011

Здравствуйте, я хочу получить XML от Google Weather

var xmlhttp;

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp= new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

 xmlhttp.open("GET", "http://www.google.com/ig/api?weather=london&hl=en", true);

xmlhttp.send(null);

xmlDoc=xmlhttp.responseXML;

Это не работает.Спасибо

Ответы [ 3 ]

3 голосов
/ 20 июня 2011

XMLHttpRequest является асинхронным. Вам нужно использовать обратный звонок. Если вы не хотите использовать полноценную библиотеку, я рекомендую использовать XHR-оболочку Quirksmode :

function callback(xhr)
{
    xmlDoc = xhr.responseXML;
    // further XML processing here
}

sendRequest('http://www.google.com/ig/api?weather=london&hl=en', callback);

Если вы абсолютно настаиваете на том, чтобы реализовать это самостоятельно:

// callback is the same as above

var xmlhttp;

if (window.XMLHttpRequest)
{
    xmlhttp = new XMLHttpRequest();
}
else
{
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.open("GET", "http://www.google.com/ig/api?weather=london&hl=en", true);

xmlhttp.onreadystatechange = function ()
{
    if (xmlhttp.readyState != 4) return;
    if (xmlhttp.status != 200 && xmlhttp.status != 304) return;
    callback(xmlhttp);
};

xmlhttp.send(null);

Редактировать

Как прокомментировал @ remi :

Я думаю, вы получите исключение междоменного доступа: вы не можете сделать ajax-запрос к другому домену, кроме вашей страницы. нет?

Что (по большей части) правильно. Вам нужно будет использовать прокси на стороне сервера или любой другой API, предоставляемый Google, вместо обычного XHR.

0 голосов
/ 21 июня 2011

Хорошо, вот код:

<html>
<body>

<script type="text/javascript">

var xmlhttp;
var xmlDoc;
function callback(xhr)
{
    xmlDoc = xhr.responseXML;
    // further XML processing here
}


if (window.XMLHttpRequest)
{
    xmlhttp = new XMLHttpRequest();
}
else
{
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.open("GET", "http://www.google.com/ig/api?weather=london&hl=en", true);
xmlhttp.onreadystatechange = function ()
{
    if (xmlhttp.readyState != 4) return;
    if (xmlhttp.status != 200 && xmlhttp.status != 304) return;
    callback(xmlhttp);
};

xmlhttp.send(null);



alert(xmlDoc);

</script>

</body>
</html>

Не возвращает никаких ошибок, но оповещение возвращает неопределенное.

0 голосов
/ 20 июня 2011

Вы не можете сделать это с помощью javascript, так как это междоменный запрос. Вы должны сделать это на стороне сервера.

В PHP вы бы использовали CURL.

То, что вы пытаетесь сделать, нельзя сделать с помощью Javascript.

...