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

Location aware and weather website. Problems with Javascript and cross site XML

本文关键字:站点 XML 问题 网站 感知 位置 Javascript      更新时间:2023-09-26

试图制作一个页面,通过Javascript向用户显示当前天气。因此,我有一些代码可以找到用户位置,并正确创建一个URL,该URL将完全符合Google天气API的惯例,但问题是发出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>

Wikipedia有一个关于如何设置有效XMLHttpRequest的好例子。

基本上,您需要为您的请求设置一个onreadystatechange侦听器,然后打开通过URL(即:weather_http,而不是代码中的"weather_http")的连接,最后发送所有数据。

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

当你让XHR工作时,你会发现没有代理你就无法完成你想要做的事情。这是因为XHR的跨域策略。您无法通过XHR从与应用程序当前域不同的域获取数据。

为了克服这一点,您需要实现一个服务器代理来将XHR提交到另一个域,检索响应并将其返回给您的应用程序。有大量的代理免费提供,只需在谷歌上搜索即可。

最后,你会遇到最后一个问题,那就是告诉你的代理追加?weather=城市到目标URL。

祝你好运!