Yahoo Placefinder с Mootools - PullRequest
       2

Yahoo Placefinder с Mootools

1 голос
/ 23 августа 2011

Я пытаюсь использовать Yahoo Placefinder на моем сайте, чтобы найти местоположение людей, но это не работает. Должно быть, я что-то делаю не так, но не могу понять, что.

У меня есть следующий код:

new Request.HTML({ method: 'get', url: 'http://where.yahooapis.com/geocode?q=1600+Pennsylvania+Avenue,+Washington,+DC&appid=KGe6P34c',
    onSuccess: function () {
        console.log("aaa");
    }
}).send();

Функция onSuccess никогда не вызывается. Используя firebug, я вижу, что запрос был отправлен, и что получен какой-то ответ. Я получаю эти заголовки ответа:

Date: Tue, 23 Aug 2011 09:51:18 GMT
P3P: policyref="http://info.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV"
X-Yahoo-Serving-Host: wws2.geotech.ch1.yahoo.com
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml; charset=utf-8
Cache-Control: private

но тело ответа пусто.

Странная вещь в том, что если я наберу запрос URL *1013* в своем веб-браузере, я получу обычный XML-ответ. Я также использую сторону сервера службы placefinder в одном месте без проблем:

    String reqURL = "http://where.yahooapis.com/geocode?postal=" + HttpUtility.UrlEncode(postCode) + "&Country=" + HttpUtility.UrlEncode(countryCode) + "&appid=KGe6P34c";
    XmlDocument xml = new XmlDocument();
    xml.Load(reqURL);

Что я делаю не так?

1 Ответ

3 голосов
/ 23 августа 2011

вы делаете междоменный запрос XHR, который не разрешен из-за политик безопасности.

Обходные пути:

Множество примеров вокруг, которые предоставляют код для YQL + MOOTOOLS + JSONP, хотя я бы поставил под сомнение мою бизнес-логику и использовал бы здесь - полагаться не на 1, а на 2 службы на основе Yahoo очень близко, и высокая / критическая производительность не может быть гарантированный или ожидаемый.

Помните шутку о том, что самый быстрый способ отключить любую услугу - это заставить Yahoo купить ее.

Пример через расширение Request.JSONP из mootools-more:

Request.GeoData = new Class({

    Extends: Request.JSONP,

    options: {
        url: "http://geoip.pidgets.com/?format=json"
    },

    initialize: function(options) {
        this.parent(options);
        if (this.options.ip) {
            this.options.url += "&ip=" + this.options.ip;
        }
    }

});

new Request.GeoData({
    // default ip = client
    onComplete: function(data) {
        console.log(data);
    }
}).send();

new Request.GeoData({
    // hardwire an ip to check for:
    ip: "87.106.181.42",
    onComplete: function(data) {
        console.log(data);
    }
}).send();

Вы можете использовать YQL для дальнейшей разработки:

Request.getPlaceInfo = new Class({
    // return json data with extended information of a place / location.
    Extends: Request.JSONP,
    options: {
        url: "http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text='{location}'&format=json",
    },
    initialize: function(location, options) {
        this.parent(options);
        this.options.url = this.options.url.substitute({location: location});
    },
    success: function(data, script) {
        this.parent(data, script);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...