2012-03-22 100 views
3

我试图使用CORS让脚本对geonames执行Ajax请求。 我的脚本调用这个Web服务方法:http://www.geonames.org/export/web-services.html#findNearbymootools请求类和CORS

如果您检查样品呼叫的响应头,它们包括: 访问控制允许来源:*

当我尝试这通过MooTools(版本1.4.5刚刚下载):

var urlGeonames = "http://api.geonames.org/findNearbyPlaceName"; 
var req = new Request({ 
    method: 'get', 
    url: urlGeonames, 
    data: { 
'lat': '89.18', 
'lng': '-0.37', 
'username': 'myusername', 
'radius': '5' 
    } 
}).send(); 

然后我得到一个错误,指出:

XMLHttpRequest cannot load 
http://api.geonames.org/findNearbyPlaceName?lat=89.18&lng=-0.37&username=myusername&radius=5. 
Origin http://127.0.0.1 is not allowed by Access-Control-Allow-Origin.</pre> 

在另一方面,当我尝试旧式Ajax代码是这样的:

invocation = new XMLHttpRequest(); 
if(invocation) 
{  
    invocation.open('GET', urlFlickr, true); 
    invocation.onreadystatechange = handler; 
    invocation.send(); 
} 

,然后它工作,我得到的XHR应答XML的XML响应。

我发现这个职位A CORS POST request works from plain javascript, but why not with jQuery?这是相似的。但在这里我不处理我的服务器,所以我只能在JavaScript方面工作。

有没有人与CORS和mootools合作过,可以帮助解决这个问题? 非常感谢 JM

+0

BTW本网站和API是真棒!我几个月前才发现它。如果您需要更多帮助,请填写下面的答案。 – 2012-03-26 20:14:32

回答

1

嗨,哥们看看MooTools的更多JSONP这将解决你的问题:

http://mootools.net/docs/more/Request/Request.JSONP

此外,它看起来像你忘了从geonames.org

JSON格式自讨苦吃

试着这么做:

var myJSONP = new Request.JSONP({ 
    url: 'http://api.geonames.org/findNearbyPlaceNameJSON', 
    data: { 
     'lat': '89.18', 
     'lng': '-0.37', 
     'username': 'myusername' 
    }, 
    onRequest: function(url){ 
     // a script tag is created with a src attribute equal to url 
    }, 
    onComplete: function(data){ 
     // the request was completed. 
     console.log(data); 
    } 
}).send(); 

希望这有助于!

1

这个其他线程的第一个答案: MooTools CORS request vs native Javascript

可能的帮助。

基本上,X-请求-随着头自动地被Mootools的与请求一起发送,但是服务器要么必须被配置为接受该标头,也可以使用

delete foo.headers['X-Requested-With']; 

删除它调用之前

foo.send(); 

由服务器允许的话,你可以添加到您的脚本的.htaccess文件,让后面的JSON数据:

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept" 

所以你会是什么样子:

var myJSON = new Request({ 
    url: 'http://api.geonames.org/findNearbyPlaceNameJSON', 
    data: { 
     'lat': '89.18', 
     'lng': '-0.37', 
     'username': 'myusername' 
    }, 
    onRequest: function(url){ 
     // a script tag is created with a src attribute equal to url 
    }, 
    onComplete: function(data){ 
     // the request was completed. 
     console.log(data); 
    } 
}); 
delete myJSON.headers['X-Requested-With']; 
myJSON.send();