2011-08-23 3 views
1

사람들의 위치를 ​​찾기 위해 내 웹 사이트에서 야후 placefinder를 사용하려고하는데 작동하지 않습니다. 나는 틀린 일을해야 할 것이다. 그러나 나는 무엇을 해결할 수 없다. onSuccess 함수가 호출되지 않습니다mootools로 야후 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(); 

:

나는 다음과 같은 코드가 있습니다. 방화 광구를 사용하여 요청을 보냈으며 어떤 종류의 응답이 수신됨을 알 수 있습니다. 다음과 같은 응답 헤더를 수신합니다.

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 

응답 본문은 비어 있습니다.

이상한 점은 웹 브라우저에 request URL을 입력하면 일반적인 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); 

무엇이 잘못 되었나요?

답변

3

보안 정책으로 인해 허용되지 않는 크로스 도메인 XHR 요청을하고 있습니다.

해결 방법은 다음과 같습니다

많음 내 비즈니스 로직을 질문하고 여기에 사용하는 거라고하지만 -하지에 의존하고있는 1이지만 2 개의 야후 기반 서비스는 매우 가까이에 있으며 높은/중요한 성능을 보장하거나 기대할 수 없습니다.

서비스를 종료하는 가장 빠른 방법은 야후에서 서비스를 구매하는 것입니다. Mootools의-더에서 Request.JSONP 확장을 통해

예 :

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); 
    } 
}); 
+0

아야, 감사를. 구글의 지오 코더 (geocoder)가 내 회사의 기반이 된 채널 아일랜드 (Channel Islands)에서 작동하지 않기 때문에 야후의 서비스 만 사용하려했습니다. 나는 다른 해결책을 찾는다 고 생각한다. – Oliver

+0

다음은 사용하려는 JSONP 가능 Geolocation 서비스의 예제 코드입니다. http://jsfiddle.net/dimitar/7KHKF/ –