Javascript 这个jsonp应该很容易工作,我做错了什么?
我尝试使用异步jsonp在网页上显示实时价格:Javascript 这个jsonp应该很容易工作,我做错了什么?,javascript,jsonp,Javascript,Jsonp,我尝试使用异步jsonp在网页上显示实时价格: function addscript () { var url = "http://wdcticker.com/api/ticker?callback=updatePrices" + "&random=" + (new Date()).getTime(); var newScript = document.createElement("script"); newScript.setAttribute("src",ur
function addscript () {
var url = "http://wdcticker.com/api/ticker?callback=updatePrices" + "&random=" + (new Date()).getTime();
var newScript = document.createElement("script");
newScript.setAttribute("src",url);
newScript.setAttribute("id","jsonp");
var oldScript = document.getElementById("jsonp");
var head = document.getElementsByTagName("head")[0];
if (oldScript == null) {
head.appendChild(newScript);
} else {
head.replaceChild(newScript, oldScript);
}
console.log('done');
}
function updatePrices(result){
alert('got here');
$('#wdcusd').text(result.wdc_usd_avg);
$('#wdcbtc').text(result.wdc_btc_avg);
}
每10秒成功调用一次addscript
函数。未调用回调函数updatePrices()
。我的控制台显示的错误是:
语法错误:缺少;声明前
"btc_e_btc_set": true,
即使json at完全通过json lint。我做错了什么!!?这应该很简单 如果支持JSONP
,您将看到该url的响应:
updatePrices({
// JSON here
});
相反,它只返回原始JSON,如下所示:
{
// JSON here
}
因此,您试图连接的服务器似乎不支持
JSONP
,需要服务器端支持。您不能将JSONP
与任何JSON
API一起使用,API服务器必须明确支持并允许JSONP
服务不返回JSONP(它返回JSON),因此您不能使用JSONP。检查服务的API文档是否支持JSONP以及如何启用它。如果他们不支持,可能还有其他选项可以从客户端JavaScript访问数据。如果没有,你就不走运了(你必须创建自己的服务器端服务来请求数据)。非常感谢!你能给我解释一下返回jsonp和常规json的区别吗?我认为它是相同的格式,只是不同的技术如何调用它?JSON只是一种数据格式。JSONP更多的是一种如何检索数据的技术。正如您已经在代码中所做的那样,JSONP实际上包含了一个外部JavaScript文件,其中包含一个函数调用:someCallback(/*data*/)代码>。因此,来自服务器的响应必须是有效的JavaScript。然而,JSON本身不是有效的JavaScript,因此您会遇到这个错误。谢谢Felix!我现在觉得自己很傻,这太明显了!天啊,我终于明白了。非常感谢你,你是个救命恩人。