2014-09-06 32 views
0

我正在嘗試將SoundCloud URL解析爲曲目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

+0

PLZ郵政編碼完成錯誤,你在控制檯中得到.. – 2014-09-06 16:23:32

+0

getJSON如何不同步,它只是$ .ajax()的快捷方式(http://stackoverflow.com/questions/5922175/jquery-getjson-vs-ajax-json) – 2014-09-06 16:23:32

+1

這是一個X/Y問題,當您嘗試讓其他代碼與異步性質的ajax一起工作時,您試圖使某些內容同步。 – adeneo 2014-09-06 16:28:51

回答

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(); 
    } 
); 
0

根據你的答案,因爲你是一個跨域調用,你可以有一個選項,在阿賈克斯呼籲同樣是這樣設置:

$.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); 
      } 
}); 

在這裏有跨域設置爲true的選項。它是可用的版本1.5

+0

永遠不要鼓勵'async:false'(尤其是當代碼使用'success'回調時!):) – 2014-09-06 23:21:27

+0

這給了我同樣的錯誤。在進行跨域呼叫時,「crossDomain」默認爲true。 – Etzolin 2014-09-07 13:53:34