【发布时间】:2013-12-28 06:17:55
【问题描述】:
我正在尝试使用异步 jsonp 在网页上显示实时价格:
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);
}
addscript 函数每 10 秒调用一次。未调用回调函数updatePrices()。我的控制台显示的错误是:
语法错误:缺失;前声明
"btc_e_btc_set": true,
即使http://wdcticker.com/api/ticker 的 json 完美地通过了 json lint。我究竟做错了什么!!?这应该就是这么简单!
【问题讨论】:
-
服务不返回 JSONP(它返回 JSON),所以你不能使用 JSONP。检查服务的 API 文档是否支持 JSONP 以及如何启用它。如果他们不支持它,也许还有其他选项可以从客户端 JavaScript 访问数据。如果没有,那你就不走运了(你必须创建自己的服务器端服务来请求数据)。
-
非常感谢!您能向我解释一下返回 jsonp 和常规 json 的区别吗?我以为它是相同的格式,只是不同的技术如何调用它?
-
JSON 只是一种数据格式。 JSONP 更像是一种如何检索数据的技术。正如您已经在代码中完成的那样,JSONP 实际上是包含一个外部 JavaScript 文件,其中包含一个函数调用:
someCallback(/* data */);。因此,来自服务器的响应必须是有效的 JavaScript。然而,JSON 本身不是有效的 JavaScript,因此您会收到该错误。 -
谢谢菲利克斯!我现在感觉很愚蠢,这很明显!
标签: javascript jsonp