获取未捕获的语法错误:意外的令牌:读取 jsonp 响应时
Posted
技术标签:
【中文标题】获取未捕获的语法错误:意外的令牌:读取 jsonp 响应时【英文标题】:Getting Uncaught SyntaxError: Unexpected token : when reading jsonp response 【发布时间】:2013-12-05 20:19:46 【问题描述】:我正在编写一段代码,在该代码中,用户单击按钮拨打电话,然后向他/她显示通话状态。
一切正常,调用也在进行中,但是发送 json 响应的服务器在另一个域上,我无法控制它的响应。因此,我使用jsonp
来获得响应,但无论我做什么,我都会不断收到 Uncaught SyntaxError: Unexpected token 的错误。
我附上我的代码。请帮忙,因为这是一个现场项目,我被严重困在其中。我需要一个响应来提醒服务器收到的消息。如果成功,服务器收到的消息是"success": "status": "success", "message": "Call successfully placed"
,如果出错是"error": "message": "Invalid API Key"
。我只需要显示消息部分。
我的代码:
function makecall()
document.getElementById('<%=click2call_submitbtn.ClientID%>').disabled = true;
var agentNum = document.getElementById('<%=lblCallFrom.ClientID%>').innerhtml;
var custNum = "+91";
custNum = custNum + document.getElementById('<%=txtNotoCall.ClientID%>').value;
document.getElementById('<%=lblCallStatus.ClientID%>').innerHTML = "Calling...";
if (validatePhone(agentNum) && validatePhone(custNum))
$.ajax(
url: 'http://www.knowlarity.com/vr/api/click2call/?api_key=9e69eab0-1ec7-11e3-866c-16829204aaa4&agent_number=agent_number_variable&phone_number=Caller_number_variable&sr_number=%2B918881692001&response_format=json'.replace('Caller_number_variable', custNum.replace('+', '%2B')).replace('agent_number_variable', agentNum.replace('+', '%2B')),
type: 'GET',
cache: false,
dataType: 'jsonp',
success: function (res)
alert(JSON.stringify(res));
,
error: function (res)
alert(JSON.stringify(res));
);
else
document.getElementById('<%=lblCallStatus.ClientID%>').innerHTML = "Num. should be a valid 10 digit mobile no.";
document.getElementById('<%=click2call_submitbtn.ClientID%>').disabled = false;
【问题讨论】:
你从远程服务器返回什么,你能使用 fiddler 并寻找响应,看看它返回什么以及它是否符合预期的格式。还有你为什么要对 & 进行 URl 编码?查询参数之间 我收到的警报响应是 "readyState":4,"status":200,"statusText":"load" 并且 Chrome 中的控制台给出了错误 Uncaught SyntaxError:意外的标记 : 。 & 的 URI 编码是因为它与我从服务器公司收到的相同。如果我单击控制台中显示的 www.knowlarity.com/:1 链接以及此错误,我会收到成功的文本 "success": "status": "success", "message": "Call 已成功放置"。 另外,当我在 JSONLint 验证器中测试 url 时,将输出作为有效的 JSON。输出是 "success": "status": "success", "message": "Call succeeded" 我使用 stringily(res) 是因为我想看看字符串格式的完整输出是什么。如果我将它用作对象,则会给出未定义的错误。我还将进行您建议的拆分测试并将结果发回。感谢您抽出宝贵时间。 我尝试了您提到的所有选项并得到以下回复。 console.log(res) 给出错误 Uncaught SyntaxError: Unexpected token : The var json = JSON.stringify(res);控制台.log(json);给出以下错误 Uncaught SyntaxError: Unexpected token : The var json = JSON.stringify(res);警报(json);给出以下错误 "readyState":4,"status":200,"statusText":"load" 并且 Chrome 中的控制台给出错误 Uncaught SyntaxError: Unexpected token : 【参考方案1】:尝试将此作为绝对最小值,您可以在其中为数字传递有效的硬接线值:
var url = 'http://ip.jsontest.com/ ';
$.ajax(
url: url,
cache: false,
dataType: 'jsonp',
success: function (res)
if (res != undefined) console.log(res);
,
error: function (res)
if (res != undefined) console.log(res);
);
【讨论】:
我用您发送的代码替换了我的代码,但同样的错误。开发工具中的控制台显示 Uncaught SyntaxError: Unexpected token : ,网络选项卡显示 url knowlarity.com/vr/api/click2call/… 方法 GET 和状态 200 OK,标题部分很好,预览显示成功:状态:成功,消息:呼叫成功放置 & 响应也显示成功 但是尽管上述所有错误仍然存在,并且从未达到成功部分... 我怀疑我发送请求的服务器不支持 JSONP。在这种情况下我该怎么办? 我已更新测试 URL 以调用服务器,该服务器肯定返回 JSON 对象。它应该是您的 IP 地址 - 您可以尝试一下 - 代码本身应该可以工作。如果您仍然遇到问题,它们就在您的代码中,您需要找到它们。如果恢复正常,那么您的服务器不会返回 JSON 数据,您可以简单地删除 dataType: 'jsonp' 并发出正常的 get 请求以上是关于获取未捕获的语法错误:意外的令牌:读取 jsonp 响应时的主要内容,如果未能解决你的问题,请参考以下文章
WCF 跨域使用 Jsonp 错误未捕获语法错误:意外令牌: