未捕获的SyntaxError:意外的令牌:跨域问题?

时间:2015-02-18 04:18:27

标签: javascript jquery ajax json

我正在尝试对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。

  1. 在搜索此错误时,我看到json应该更改为jsonp,我收到以下错误:

    资源被解释为脚本但以MIME类型text / html传输:&#34; http://api.railwayapi.com/between/source/gzb/dest/anvt/apikey/56237/?callback=jQuery111208570126367267221_1424232589162&_=1424232589163&#34;。

  2. 当我将数据类型更改为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/

    我如何确定请求是跨域的?

    任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

问题是印度铁路API似乎不支持JSONP。

如果你阅读他们的文档,你会看到这一行:

  

请求应仅从您的服务器进行,​​而不是来自客户端浏览器或应用程序。

因此,您可以使用允许CORS的代理服务器,但这可能违反了他们的服务条款。它还允许世界上任何人都能看到您的API密钥。

这对您来说可能不是一个现实的选择,但最好的解决方案是编写一个与Indian Railway API通信的服务器端应用程序,然后将数据发送回您的前端而不暴露API密钥。< / p>