我正在尝试对Indian Railway API进行Ajax调用,该API提供JSON格式的各种数据。这是我的代码:
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"</script>
<script>
function getData()
{
var theUrl = 'http://api.railwayapi.com/between/source/gzb/dest/anvt/apikey/56237/'
$.ajax({
url: theUrl,
crossDomain: true,
dataType: 'jsonp',
success: function(data){
alert(JSON.stringify(data));
},
error: function(data){
alert('ERROR');
}
});
}
</script>
<body>
<input type="button" value="Get Data" onclick="getData()"></button>
</body>
这是一个非常简单的电话,但我不明白为什么它一直显示错误警告框。我尝试过的几件事情: 1.我收到错误&#34; No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; null&#39;因此不允许访问。&#34;如果我将数据类型保存为json。
在搜索此错误时,我看到json应该更改为jsonp,我收到以下错误:
资源被解释为脚本但以MIME类型text / html传输:&#34; http://api.railwayapi.com/between/source/gzb/dest/anvt/apikey/56237/?callback=jQuery111208570126367267221_1424232589162&_=1424232589163&#34;。
当我将数据类型更改为json时,它添加了回调,我理解这是正确的。
另一个错误是:
未捕获的SyntaxError:意外的令牌:?callback = jQuery111208570126367267221_1424232589162&amp; _ = 1424232589163:2
位于此行&#34; response_code&#34;:200,
当我在浏览器中通过URL运行API时,它运行完美。当我查看开发人员工具时,然后在Chrome中的Sources下,它确实显示了JSON响应。如果是这种情况,那么为什么它没有显示&#34;成功&#34;。
的警报访问API的链接是: http://api.railwayapi.com/between/source/lko/dest/anvt/apikey/56237/
我如何确定请求是跨域的?
任何帮助将不胜感激。谢谢。
答案 0 :(得分:2)
问题是印度铁路API似乎不支持JSONP。
如果你阅读他们的文档,你会看到这一行:
请求应仅从您的服务器进行,而不是来自客户端浏览器或应用程序。
因此,您可以使用允许CORS的代理服务器,但这可能违反了他们的服务条款。它还允许世界上任何人都能看到您的API密钥。
这对您来说可能不是一个现实的选择,但最好的解决方案是编写一个与Indian Railway API通信的服务器端应用程序,然后将数据发送回您的前端而不暴露API密钥。< / p>