我有一些成功点击端点的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。
答案 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。