Uncaught SyntaxError: Unexpected token : when returning JSON

Uncaught SyntaxError: Unexpected token : when returning JSON

我有一些 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");
})
;

代码 returns 以下 JSON 响应 - 我可以在 Chrome 开发人员工具中看到:

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

我已检查返回的 JSON 是否有效,但我不断收到错误消息:Uncaught SyntaxError: Unexpected token :

我不确定我到底做错了什么或者为什么我会收到这条消息,非常感谢任何指导。

本格拉。

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

'Cross-domain json requests are converted to jsonp unless the request includes jsonp: false in its request options.'

所以您可能正在进行跨域调用,并且它被转换为 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 代码,您可以更清楚地了解它,但这是一般情况。

终于找到答案了

在我们的例子中,我们使用的是生成上述 URL/orchestration 脚本命中以获得 JSON 等的中间件设备。我们试图做的是使用 JSONP 请求来获取此信息,但是 的编排 returns JSON 没有包含在函数中 ,这就是我们的问题所在。

相反,我们将其更改为标准 JSON get 请求,然后导致 Access-Control-Allow-Origins 错误(好linkhere)。在这一点上,我们将 Access-Control-Allow-Origins 设置添加到 orchestration/server 端 - 然后我们能够以可用的方式恢复 JSON格式化成功。