2013-05-24 6 views
0

У меня есть приложение rails с хостом http://myhost.dev, и он ищет музыку, используя API vk.com (русский facebook), поэтому он предоставляет метод поиска audio.search. Это мой search.js.erb, который вызывается с удаленной ссылкой для поиска действия некоторого контроллера:Еще одна проблема CORS?

VK.api('audio.search',{q: "<%= j params[:query] %>", auto_complete: "1", sort: "2", count: "200"},function(data){ 
    if(data.response) { 
    $(function() { 
     var audio = $('audio'); 
     // Setup the audio.js player 
     var a = audiojs.create(audio); 
     }); 
     // Load in the first track 
     var audio = a[0]; 
      first = $('ol a').attr('data-src'); 

     console.log(first); 
     $(".song-title").text($('ol a').first().text()); 
     $('ol li').first().addClass('playing'); 

     // load resource to player 
     audio.load(first); 
     }); 
    }); 

    } 

    else { 
    /* handle error */ 
    } 
}); 

Моего application.js:

// initiate vk application 
    VK.init({ 
    apiId: '3650724' 
    }); 

Это все в порядке, все это работает, но это не на другом пути! Например, на маршруте http://myhost.dev/foo У меня есть еще один тэг аудио и код вроде этого:

:javascript 
    var artist = '#{ @artist.name }'; 
    // Setup the player to autoplay the next track 

    // Setup the player to autoplay the next track 

    // Load in the first track 
    var track_name = $('ol a').first().attr('data-src'); 
    VK.api('audio.search',{q: artist + " - " + track_name, auto_complete: "1", sort: "0", count: "1"},function(data){ 
    if(data.response) { 
     $(function() { 
     alert("lol"); 
     var audio = $('audio'); 
     var a = audiojs.create(audio); 
     var first_track = data.response[1]; 
     $(".song-title").text(first_track.title); 
     $('ol li').first().addClass('playing'); 

     console.log(first_track.url); 
     audio.load(first_track.url); 
     }); 
    } 
    else { 
     alert("fail!"); 
    } 
    }); 

Он возвращает правильный ответ JSON, но при загрузке URL ресурса игрока дает мне

XMLHttpRequest cannot load http://cs4967.vk.me/u5366455/audios/some.mp3. Origin http://myhost.dev is not allowed by Access-Control-Allow-Origin. 
+0

Поддерживает ли он JSONP? – epascarello

+0

Да, причина, по которой она работает в первом случае, и не работает во втором случае с измененным URL (но тот же домен) – xamenrax

ответ

1

Этому это не проблема с вашими запросами API, но с элементом <audio /><video />, если на то пошло) запрашиваются только запросы on the same domain.

VK не выбрасывает заголовки CORS для URL-адреса, который вы указали (хотя это 404). Если это так, вам, возможно, придется использовать свой собственный сервер в качестве прокси-сервера, а также получить mp3-файлы на свой сервер и потопить их оттуда.

+0

Извините за поздний ответ, но я не делаю кросс-доменный запрос, домен тот же (http: /myhost.dev и http://myhost.dev/foo). Но в первом случае все в порядке, и возврат XMLHttpRequest не может быть загружен во втором случае. – xamenrax

+1

@ Никита: Я не уверен, какая часть моего ответа вызывает путаницу, но она по-прежнему стоит. Мое предположение, что запрос AJAX преуспевает во втором запросе, но его *** присваивание *** звуковой дорожки (которая находится на домене http: // cs4967.vk.me) на ваш '

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