当API不允许Access-Control-Allow-Origin时该怎么办

我对所有这些同源策略的事情都很疯狂。

当我尝试向Google Maps API发出请求时,我没有遇到任何问题:

var jsonData = $.ajax({ url:"http://maps.googleapis.com/maps/api/geocode/json?address=", dataType:"json", async:true, success: function(json){...} } 

我认为这是因为Google Maps API允许Access-Control-Allow-Origin。 但是当我尝试使用openls.geog.uni-heidelberg.de API时,我得到了跨源错误:

 var xmlData = $.ajax({ type: "GET", url:"http://openls.geog.uni-heidelberg.de/route?" //dataType:"jsonp xml", dataType: "xml", async:true, crossDomain : true, success: function(xml){...} } 

请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此不允许Origin’http:// localhost ‘访问。

有人认为我不明白的是,如果openls API不允许跨源,为什么可以直接从我的浏览器做一个请求,只需键入以下URL:

http://openls.geog.uni-heidelberg.de/route?start=9.256506,49.240011&end=8.72083,49.7606&via=&lang=de&distunit=KM&routepref=Bicycle&weighting=Shortest&avoidAreas=&useTMC=false&noMotorways=false&noTollways=false&noUnpavedroads=false&noSteps=false&noFerries=假指令=假

但是我不能用jquery来做。 我也尝试过jsonp解决方案,但它不能与xml一起使用。

有什么想法发生了什么?

由于本地运行的两个项目(Angular App和Node.JS Webservices)的交互引起的CORS问题,我一直在努力工作太久

看看简单易用的解决方法:Chrome的插件AllowControlAllowOrigin。

https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi

只需将单选按钮从红色切换为绿色,不再阻止请求,错误或警告! 我希望它能与你的API一起工作,当然它不是一个永久的解决方案,但这是避免浪费时间在那些烦人的经常性问题上的好方法。