【问题标题】:Yet another CORS issue?另一个CORS问题?
【发布时间】:2013-05-20 04:16:54
【问题描述】:

我有主机http://myhost.dev的rails应用程序,它使用vk.com(俄罗斯facebook)的API搜索音乐,所以它提供了搜索方法audio.search。这是我的 search.js.erb,它通过远程链接调用某些控制器的搜索操作:

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.

【问题讨论】:

  • 是否支持 JSONP?
  • 是的,导致它在第一种情况下工作,并在第二种情况下失败,更改 url(但域相同)

标签: javascript ruby-on-rails ajax cors vk


【解决方案1】:

这不是您的 API 请求的问题,但对于 &lt;audio /&gt; 元素(以及与此相关的 &lt;video /&gt;)仅请求 on the same domain

VK 不会为您列出的 URL 发出 CORS 标头(尽管它是 404)。如果是这种情况,您可能必须使用自己的服务器作为代理,将 mp3 检索到您的服务器上,然后从那里进行流式传输。

【讨论】:

  • 抱歉回复晚了,但是我不做跨域请求,例如域是一样的(myhost.devmyhost.dev/foo)。但在第一种情况下一切正常,在第二种情况下返回 XMLHttpRequest 无法加载。
  • @Nikita:我不确定我的答案的哪一部分会引起混淆,但它仍然存在。我猜 AJAX 请求在第二次查询中成功,但它是音频轨道(位于 http://cs4967.vk.me 域上)的 assignment 到您的 @ 987654328@ 引发错误的元素,如 &lt;audio /&gt; 来源 must reside on the same domain,除非服务器支持 CORS(在这种情况下,似乎并非如此)。
猜你喜欢
  • 2021-09-03
  • 2021-08-03
  • 1970-01-01
  • 2020-02-22
  • 2021-08-22
  • 2013-08-22
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多