$ .getJSON()获取数据,$ .ajax()没有

时间:2014-09-06 16:20:42

标签: javascript jquery ajax json soundcloud

我正在尝试将SoundCloud网址解析为曲目ID,因此我稍后可以将曲目ID与SC.stream()一起使用。

此代码有效,但由于它是异步的,因此它不能与我的其余代码一起使用:

$.getJSON(
  'http://api.soundcloud.com/resolve.json?url=' + trackUrl + '&client_id=' + clientId,
  function(result) {
    console.log('Track ID: ' + result.id);
    setTrackId(result.id);
  }
);

我试图用.ajax()做同样的事情,所以它可以是异步的,但我无法让它发挥作用。控制台显示GET错误。

以下是代码:

$.ajax({
  url:      'http://api.soundcloud.com/resolve.json?url=' + trackUrl + '&client_id=' + clientId,
  dataType: 'json',
  async:    false,
  success:  function(result) {
              console.log('Track ID: ' + result.id);
              setTrackId(result.id);
            }
});

如何让我的ajax代码正常工作?或者我这样做是错的?试图寻找答案,但没有找到任何有用的东西。感谢。

编辑:以下是我的其余代码:http://codepen.io/etzolin/pen/Jonqe

2 个答案:

答案 0 :(得分:0)

由于我正在进行跨域调用,因此我无法使用async: false,而且似乎无论如何我都不应该这样做。

我使用$.getJSON()解决了我的问题,只是让我的音乐流代码成为一个函数,因此它可以在success回调运行:

$.getJSON(
  'http://api.soundcloud.com/resolve.json?url=' + trackUrl + '&client_id=' + clientId, function(result) {
    console.log('Track ID: ' + result.id);
    setTrackId(result.id);
    streamTrack();
  }
);

答案 1 :(得分:0)

根据您的答案,因为您正在进行跨域调用,您可以在.ajax调用中设置一个选项,如下所示:

$.ajax({
  url:      'http://api.soundcloud.com/resolve.json?url=' + trackUrl + '&client_id=' + clientId,
  dataType: 'json',
  async:    false,
  crossDomain: true,
  success:  function(result) {
              console.log('Track ID: ' + result.id);
              setTrackId(result.id);
            }
});

此处有一个将crossDomain设置为true的选项。它从版本1.5开始提供