对 TinySong 的 JSONP 请求总是失败

Posted

技术标签:

【中文标题】对 TinySong 的 JSONP 请求总是失败【英文标题】:JSONP request to TinySong always failing 【发布时间】:2014-02-23 13:43:14 【问题描述】:

我正在尝试使用以下代码向 tinysong api 发送 JSONP 请求

var url = "http://tinysong.com/s/calvin+harris?format=json&limit=3&key=api_key"

function jsonpCallback(json) 
    console.log(json);


var script = document.createElement('script');
script.src = url+'&callback=jsonpCallback';
document.body.appendChild(script);

但继续在控制台中获取消息

Resource interpreted as Script but transferred with MIME type text/html: 

我也尝试了以下方法并得到了同样的错误

$.ajax(
    type: 'GET',
    url: url,
    jsonpCallback: 'jsonCallback',
    dataType: 'jsonp',
    success: function(json) 
        console.log(json);
    ,
    error: function(e) 
        console.log(e.message);
    
);

function jsonCallback(json)  
    console.log(json); 

我确定 api 正在响应,因为我在 chrome 中检查了网络选项卡并且可以看到来自 API 的响应。您对我能做什么有什么建议,或者我需要编写一个服务器端 API 来 ping TinySong api?

【问题讨论】:

【参考方案1】:

尝试在您的 ajax 调用中添加项目

    jsonp:true,

在您的 jsonpCallback 之前或之后的行 还要确保您的网址附加了“&callback=jsonpCallback”。

我正在查看我的一些旧代码,这些是我看到的唯一区别

【讨论】:

所以你的建议有点奏效,我可以看到响应总是转到错误回调。即使它在错误回调中,我现在也在研究如何提取我需要的数据。 问题似乎是 TinySong API 不支持 JSONP。它以 text/html 而不是 javascript 的形式发回数据。此外,它忽略了回调参数,因此从不调用客户端的成功函数。

以上是关于对 TinySong 的 JSONP 请求总是失败的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 .ajax 和 JSONP 时,如何处理失败的 JSON 请求?

如何发出 jsonp 请求

JSONP 请求在 Angular 应用程序中给出 404

JSONP 请求错误处理

对 JSONP 请求的工作方式感到困惑

在跨域请求中捕获 JSONP 错误