2014-09-06 3 views
0

Я пытаюсь разрешить URL-адрес SoundCloud 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 код для работы? Или я делаю все это неправильно? Пытался найти ответ, но не нашел ничего полезного. Благодарю.

EDIT: Вот остальная часть моего кода: http://codepen.io/etzolin/pen/Jonqe

+0

PLZ почтовый код полная ошибка, которую вы получаете в консоли .. –

+0

Каким образом getJSON отличается синхронностью, это всего лишь ярлык для $ .ajax() (http://stackoverflow.com/questions/5922175/jquery-getjson-vs-ajax-json) –

+1

Это проблема X/Y, вы пытаетесь сделать что-то синхронно, когда вам нужно заставить ваш другой код работать с асинхронным характером ajax. – adeneo

ответ

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 для того же, как это:

$.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 истина. Это доступно с версии 1.5

+0

Никогда не поощряйте 'async: false' (особенно когда код использует обратный вызов' success' в любом случае!) :) –

+0

Это дает мне ту же ошибку. «crossDomain» истинно по умолчанию при выполнении междоменного вызова. – Etzolin

Смежные вопросы