位置感知和天气网站。 Javascript和跨站点XML的问题

时间:2012-03-19 23:13:01

标签: javascript xml geolocation weather

尝试制作一个页面,通过Javascript向用户显示当前天气。所以我的代码可以找到用户位置并正确创建一个完全符合Google天气API约定的URL,但问题是使xml请求并向用户显示天气数据是一个问题。我已经为apache安装了mod_rewrite以解决跨站点xml问题,但它似乎没有正常工作。其他任何人都知道如何让这个工作?这是我到目前为止的代码:

<html>
<head>
    <meta name="robots" value="none" />
    <title></title>
</head>

<body>

<div id="yourinfo">

</div>
<b>url:</b> <span id="url"></span><br />
<b>city:</b> <span id="city"></span><br />

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
    if(google.loader.ClientLocation)
    {
        visitor_lat = google.loader.ClientLocation.latitude;
        visitor_lon = google.loader.ClientLocation.longitude;
        visitor_city = google.loader.ClientLocation.address.city;
        visitor_region = google.loader.ClientLocation.address.region;
        visitor_country = google.loader.ClientLocation.address.country;
        visitor_countrycode = google.loader.ClientLocation.address.country_code;
        weather_http = 'http://www.google.com/ig/api?weather=' + visitor_city + '+' + visitor_region;

        var Result = weather_http;

    }
    else
    {
        document.getElementById('yourinfo').innerHTML = '<p>Whoops!</p>';
    }


    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",'weather_http',false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;

    document.getElementById("url").innerHTML=weather_http
    document.getElementById("city").innerHTML=xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue;

    </script>

1 个答案:

答案 0 :(得分:0)

Wikipedia has a great example如何设置有效的XMLHttpRequest。

基本上你需要为你的请求设置一个onreadystatechange监听器,然后打开传递URL的连接(即:weather_http,而不是&#39; weather_http&#39;就像你的代码一样),最后发送你的所有数据。

因为XHR请求是同步的,所以你必须实现该回调,以便javascript引擎知道在XHR响应时该做什么。

当您使XHR正常工作时,您会发现在没有代理的情况下您无法做您想要做的事情。这是因为XHR的跨域政策。您无法通过XHR从与应用程序当前域不同的域获取数据。

为了克服这个问题,你需要实现一个服务器代理来将XHR提交到另一个域,检索响应并将其返回给你的应用程序。有大量代理可以免费获得,只有search google for it

最后,您将有一个最后一个问题,即告诉您的代理人将天气=城市附加到目标网址。

祝你好运!