используйте Google weather api с mootools

#javascript #mootools #cross-domain #weather

#javascript #mootools #междоменный #Погода

Вопрос:

В настоящее время у меня возникают трудности с использованием Google weather API в JavaScript с использованием Mootools.

Я использую код, подобный этому:

 var location =  $('weather-location').value; 

var req = new Request({
    url: 'http://www.google.com/ig/api?weather='   location,
    method: 'get',
    onSuccess: function(responseText, responseXML)
    {
        responseXML.getElements('forecast_information').each(function(item)
        {
            item.getElements('city').each(function(city_data)
            {
                $('placename').set('html','Weather for '   city_data.get('data'));                  
            });
        });           
    }
}).send();   
  

Этот код приводит к ошибке браузера, которая сообщается в Firebug как:

 "NetworkError: 405 Method Not Allowed - http://www.google.com/ig/api?weather=72601amp;location=72601"
  

Из того, что я могу собрать (я довольно новичок в этом), эта проблема вызвана нарушением междоменного доступа.

Я пытался:

1) используя ‘post’ вместо ‘get’ для метода … аналогичный результат

2) используя запрос.HTML и запрос.JSON вместо запроса … аналогичный результат

3) используя запрос.JSONP … другая ошибка (я думаю, форматирование документа). Я подозреваю, что это потому, что google weather API возвращает прямой XML и не настроен на обслуживание JSONP.

4) использование YQL вместо прямого URL-адреса в Google (пример URL:http://query .yahooapis.com/v1/public/yql?q=select * from xml where url=»http://www.google.com/ig/api?weather=Denver%20CO») … при этом не было ошибки, но и результатов не было возвращено (URL работает, если ввести его в адрес браузера).

Единственный способ, которым я смог заставить это работать, — это извлечь погодный XML на стороне сервера и передать его браузеру через прокси. Тем не менее, я хотел бы выполнить это, не нагружая свой сервер.

Как это можно сделать?

Ответ №1:

Это междоменная проблема. Придерживайтесь имеющегося у вас решения (прокси). Браузеру не разрешено выполнять запрос к ‘google.com ‘когда фактическая страница находится по адресу ‘yourdomain.com ‘.

Комментарии:

1. 1. Использование YQL — такое же хорошее решение, как и любое другое — по моему запросу. Расширение YQL: jsfiddle.net/oskar/dSDG8

2. здесь это не очень хорошо. Google использует robots.txt это запрещает ботов — и yql уважает это.