2015-10-05 77 views
2

我对所有这些相同来源政策的事情都很疯狂。当API不允许访问控制 - 允许来源时怎么办

当我尝试做了谷歌地图API的请求我没有问题:

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

我认为,这是因为谷歌地图API允许访问控制允许来源。但是,当我尝试使用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){...} 
} 

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost ' is therefore not allowed access.

人认为我不明白的是,如果openls API不允许跨-origin为什么可以直接从我的浏览器做请求刚刚键入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=false&instructions=false

但我可以使用jQuery无法做到。我也尝试过jsonp解决方案,但它不适用于xml。

关于发生了什么的一些想法?

+0

尝试将'dataType'更改为'jsonp' - 我想在当前的例子中可以使用JSONP而不是CORS。 – vitozev

+0

@unixarmy鉴于它正在返回XML我不认为JSONP会起作用。 –

+0

啊,对不起,我没有注意到。你是对的! :) – vitozev

回答

2

我奋斗了太长引起的两个项目的本地运行(角App和Web服务的Node.js)

看哪短期简单的解决方案的相互作用CORS问题:Chrome的插件AllowControlAllowOrigin。

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

刚刚从红色开关单选按钮为绿色,并没有更多的被禁止的请求,错误或警告! 我希望它能与你的API协同工作,当然这不是一个永久的解决方案,但这是一个很好的方法,可以避免在那些烦人的经常性问题上浪费时间。

相关问题