mootools请求类和CORS

时间:2012-03-22 21:08:13

标签: xmlhttprequest mootools cors

我正在尝试使用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

2 个答案:

答案 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();