我正在尝试使用CORS让脚本对geonames执行Ajax请求。 我的脚本调用此Web服务方法:http://www.geonames.org/export/web-services.html#findNearby
如果您检查示例调用的响应标头,它们包括: Access-Control-Allow-Origin:*
当我尝试使用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 responseXML中获得XML响应。
我发现此帖子A CORS POST request works from plain javascript, but why not with jQuery?类似。但在这里,我不是在处理我的服务器,因此我只能在javascript端工作。
有没有人与CORS和mootools合作过,可以帮助解决这个问题? 非常感谢 JM
答案 0 :(得分: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 :(得分:1)
另一个帖子的第一个答案: MooTools CORS request vs native Javascript
可能有帮助。
基本上,M-Requested-With标头由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();