【问题标题】:Callback parameter messing up ajax call?回调参数弄乱了ajax调用?
【发布时间】:2015-11-14 15:18:22
【问题描述】:

我正在尝试通过 ajax 调用获取数据:

$.ajax({
    url: "http://services.runescape.com/m=itemdb_rs/api/catalogue/detail.json?item=1048",
    type: "GET",
    dataType: "jsonp",
    success: function(data){
        console.log(data.item.name);

    },
    error: function (err) {
        console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
    }

});

因为是第三方api,所以我只是jsonp。问题是:我收到一个语法错误:“Uncaught SyntaxError: Unexpected token :”。

当我查看控制台时,我看到了数据,但它一直说 Unexpected token :,所以我看不到数据

现在,当我单击并导航到该 url 时,我可以查看数据(即 runescape url)

我做错了什么?

【问题讨论】:

  • 你把console.log放到cmets里还是会报错吗?
  • 是的,没有任何改变
  • 你说“当我查看控制台时,我看到了数据”,所以听起来你的函数实际上工作正常......错误可能是你试图运行的其他代码紧接着?
  • @Andreas 服务器返回给我 404
  • @DougMcLean:我怀疑他/她指的是“网络”选项卡,而不是 console.log 输出。

标签: javascript jquery ajax


【解决方案1】:

"Uncaught SyntaxError: Unexpected token :".

听起来第三方 API 不支持JSONP,因为这是当您尝试将 JSON 视为 JSONP 时出现的错误。请记住,JSONP 要求两端合作。

查看相关 API 的文档,它可能不支持 JSONP,可能通过不同的端点支持它,可能需要一个参数告诉它您想要 JSONP(尽管通常他们只查找 callback 请求参数jQuery 会自动添加)等。

只是为了完整性:服务器端需要知道发生了什么的原因是它需要发回不同的响应。这是一个 JSON 响应示例:

{"someProperty":"someValue"}

这是它的 JSONP 版本:

someFunctionName({"someProperty":"someValue"})

...其中someFunctionName调用者 通过请求参数定义。服务器必须查找参数并在生成响应时使用它。这是因为 JSONP 不是 ajax,严格来说,这就是为什么它不受通常规则 ajax 调用的 SOP 的约束。

【讨论】:

  • 同意 - 如果您在浏览器中转到 services.runescape.com/m=itemdb_rs/api/catalogue/…,您会得到 JSON,而不是 JSONP 响应,即使您包含回调,也会发生同样的情况,例如services.runescape.com/m=itemdb_rs/api/catalogue/…
  • 当我尝试在 ajax 调用中使用普通 json 时,url 是一个使用 runescape url 的 file_get_contents 的 php 脚本,加载需要超过 30 秒,我该如何解决?
  • @Eselko:这是一个不相关的问题。我建议将其发布为带有php 标签和其他相关标签的问题。
猜你喜欢
  • 1970-01-01
  • 2015-06-27
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 2017-08-18
相关资源
最近更新 更多