【问题标题】:This jsonp should be working so easily, what am I doing wrong?这个 jsonp 应该很容易工作,我做错了什么?
【发布时间】: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


【解决方案1】:

如果http://wdcticker.com/api/ticker?callback=updatePrices 支持JSONP,您会期望看到该网址的响应:

updatePrices({
  // JSON here
});

相反,它只是像这样返回原始 JSON:

{
  // JSON here
}

因此,您尝试连接的服务器似乎不支持JSONP,需要服务器端支持。您不能将JSONP任何 JSON API 一起使用,API 服务器必须明确支持并允许JSONP

【讨论】:

  • 天哪,我终于明白了。非常感谢你,你是救命稻草。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
相关资源
最近更新 更多