未捕获的SyntaxError:意外的令牌:返回JSON时

时间:2015-07-20 15:37:24

标签: javascript jquery json endpoint

我有一些成功点击端点的jQuery,这是我的代码

$.ajax({
    dataType: "json",
    type: "GET",
    url: "https://url.that-works.com/env/Development/GetDevs/",
    username: "username",
    password: "password",
    data: "callback=?"
})
.done(function (data) {
    alert("success");
})
;

代码返回以下JSON响应 - 我可以在Chrome开发者工具中看到:

{
"developments": [
    {
        "name": "h2010 Ph2"
    },
    {
        "name": "The Meadows Ph2"
    },
    {
        "name": "h2010 Ph3"
    },
    {
        "name": "h2010 Ph4"
    },
    {
        "name": "The Meadows Ph3"
    }
  ]
}

我已经检查过这是返回的有效JSON,但我不断收到错误消息: Uncaught SyntaxError:意外的令牌:

我不确定我在这里做错了什么,或者为什么我收到此消息,我们非常感谢任何指导。

bengrah。

2 个答案:

答案 0 :(得分:1)

在jQuery文档中,您可以找到以下内容:

'跨域json请求将转换为jsonp,除非请求在其请求选项中包含jsonp: false

因此,您可能正在进行跨域调用,并且已转换为jsonp,因为您已指定dataType: 'json'

当处于JSONP模式时,jQuery会查找这种响应:

jQuery18406445654265099913_1319844792316({
"developments": [
    {
        "name": "h2010 Ph2"
    },
    {
        "name": "The Meadows Ph2"
    },
    {
        "name": "h2010 Ph3"
    },
    {
        "name": "h2010 Ph4"
    },
    {
        "name": "The Meadows Ph3"
    }
  ]
}) 

但不是JSON字符串,因此您在转换期间收到错误。 JSONP需要一个javascript,而不是一个字符串。 如果你看看jQuery代码,你可以让它更清楚,但这是一般的。

答案 1 :(得分:0)

最终找到了答案。

在我们的案例中,我们使用的是一个中间件设备,它生成上述URL /编排,脚本命中以获取JSON等。我们尝试做的是使用JSONP请求获取此信息,但业务流程返回JSON,没有包含在函数中,这就是我们的问题所在。

相反,我们将其更改为标准的 JSON get 请求,然后导致 Access-Control-Allow-Origins错误(良好链接here) 。此时,我们将 Access-Control-Allow-Origins 设置添加到业务流程/服务器端 - 然后我们能够以可用的格式成功恢复JSON。