2014-08-28 49 views
2

我想使用AJAX和SoundCloud API来获取用户的曲目。为什么我会得到Uncaught SyntaxError:意外的令牌非法

jQuery.ajax({ 
       url: 'http://api.soundcloud.com/resolve?url=http://soundcloud.com/[SOME USER]/tracks/&format=json&consumer_key=[MY KEY]&callback=?' 
      , dataType: 'jsonp' 
      , success: function(data) { 
       console.log(data); 
      } 
      }); 

我可以看到Chrome浏览JSON数据,但我得到的错误

Uncaught SyntaxError: Unexpected token ILLEGAL 

在控制台中。

问题可能是json文件是一个json数组。那可能是错误吗? 如果是的话,我该如何将数组转换为单个对象?

+0

请告诉我数据的内容 – Ahmad 2014-08-28 12:16:38

+0

请张贴的JSON的内容! – 2014-08-28 12:17:15

+0

试一试;)[点击这里!](http://api.soundcloud.com/resolve?url=http://soundcloud.com/mrsuicidesheep/tracks/&format=json&consumer_key=524c5acd5e5c401654259eb487c4bfb2&callback=?) – brighthero 2014-08-28 12:18:06

回答

4

问题是轨道ID#159500192('Summer Chords Pt. 2' (Electro House Mix))中的描述字段具有不可见的字符,这些字符在JavaScript字符串中不合法,所以当JavaScript解析器尝试将JSONP响应作为脚本运行时会发生窒息。 SoundCloud应在通过JSONP提供内容时对这些值进行编码。

因为SoundCloud支持CORS,所以根本不需要使用JSONP。你可以简单地直接请求文件,通过移除callback=?参数和使用dataType: json(不jsonp):

jQuery.ajax({ url: "https://api.soundcloud.com/resolve?url=http://soundcloud.com/[USER]/tracks/&format=json&consumer_key=[KEY]", 
       dataType: 'json', 
       success: function(d) { console.log(d); } 
}); 
+0

我有一个非常类似的问题。有没有任何工具来检查JS字符串中的非法隐形字符? – 2015-04-21 19:12:38

相关问题