Информация о местоположении и погодный сайт. Проблемы с Javascript и межсайтовым XML - PullRequest
0 голосов
/ 20 марта 2012

Попытка сделать страницу, где она показывает текущую погоду для пользователя через Javascript.Итак, у меня есть код, который может найти местоположение пользователя и правильно создать URL, который будет идеально соответствовать соглашению для API погоды Google, но проблема заключается в том, что запрос xml и представление данных о погоде обратно пользователю доказывают проблему.Я установил mod_rewrite для apache, чтобы обойти проблему межсайтового 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 голосов
/ 21 апреля 2012

В Википедии есть отличный пример о том, как настроить действительный запрос XMLHttpRequest.

Обычно вам нужно настроить прослушиватель onreadystatechange для вашего запроса, затем открыть соединение, передав URL-адрес (например, weather_http, а не weather_http, как в вашем коде) и, наконец, отправить все ваши данные.

Поскольку запросы XHR являются асинхронными, вы должны реализовать этот обратный вызов, чтобы механизм javascript знал, что делать, когда XHR отвечает.

Когда вы включите XHR, вы обнаружите, что вы не можете делать то, что пытаетесь сделать без прокси. Это из-за междоменной политики для XHR. Вы не можете получать данные через XHR из домена, отличного от текущего домена приложения.

Чтобы преодолеть это, вам необходимо внедрить прокси-сервер для отправки XHR в другой домен, получить ответ и вернуть его в ваше приложение. Существует множество доступных прокси-серверов, просто поищите в Google .

Наконец, у вас есть еще одна проблема, которая заставляет вашего прокси добавить «weather = city» к целевому URL.

Удачи!

...