0

您好,我想从 Google Weather 获取 xml

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;

它不工作。谢谢

4

3 回答 3

3

XMLHttpRequest是异步的。您需要使用回调。如果您不想使用成熟的库,我建议使用Quirksmode 的 XHR 包装器

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 请求。不 ?

这是(大部分)正确的。您需要使用服务器端代理或 Google 提供的任何 API,而不是常规的 XHR。

于 2011-06-20T15:51:58.990 回答
-1

好的,这是代码:

<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>

它不返回任何错误,但警报返回未定义。

于 2011-06-21T07:06:20.097 回答
-1

你不能通过 javascript 来做到这一点,因为它是一个跨域请求。您必须在服务器端执行此操作。

在 PHP 中,您将使用 CURL。

您尝试做的事情不能用 Javascript 来完成。

于 2011-06-20T17:15:12.913 回答