Сайт с информацией о местоположении и погодой. Проблемы с Javascript и межсайтовым XML

Попытка сделать страницу, где она показывает пользователю текущую погоду через 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>


person Joel Smith    schedule 19.03.2012    source источник
comment
в чем именно проблема?: Что не работает?   -  person Pekka    schedule 20.03.2012
comment
Мне очень сложно сказать, потому что я новичок в javascript и у меня нет простого способа его протестировать. Кажется, URL-адрес возвращается в переменной Weather_http, но когда я делаю запрос GET и пытаюсь его проанализировать, на экран ничего не записывается.   -  person Joel Smith    schedule 20.03.2012


Ответы (1)


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

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

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

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

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

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

Удачи!

person Pedro Baracho    schedule 20.04.2012