XMLHTTPRequest错误:主线程上的同步XMLHttpRequest已弃用...(SoundCloud API)

时间:2018-03-30 15:45:51

标签: javascript api xmlhttprequest soundcloud synchronous

我使用 XMLHttpRequest访问SoundClouds 热门趋势曲目(https://api-v2.soundcloud.com/charts?kind=trending&genre=soundcloud:genres:all-music&client_id=1dff55bf515582dc759594dac5ba46e9&q=)。我甚至无法使用它来解析和所有有趣的东西,因为我的控制台记录了这个错误:

Synchronous XMLHttpRequest on the main thread is deprecated because of 
its detrimental effects to the end user's experience. For more help 
http://xhr.spec.whatwg.org/

我花了一些时间寻找答案 - 据我所知 - 问题是请求中的一些JavaScript 。所以我查看了SoundCloud API,并在每个音轨的属性中找到了这一点:

... "waveform_url":"https://wis.sndcdn.com/2AVcYzUmENai_m.json" ...

因此,我发现类似问题的所有解决方案都无法正常工作,因为我无法改变API的工作方式。也许我做错了什么,你们可以帮忙。

这是导致问题的完整功能(我认为):

function initialSearch() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', "https://api-v2.soundcloud.com/charts?kind=trending&genre=soundcloud:genres:all-music&client_id=1dff55bf515582dc759594dac5ba46e9&q=", false);
    xhr.addEventListener("load", function() {
        initialArray = JSON.parse(xhr.response);
        }, false);
} 

我把它称为" DOMContentLoaded"如果它改变了什么。

也许你可以帮助我。感谢。

1 个答案:

答案 0 :(得分:1)

您正在使用XMLHttpRequest错误。做异步请求而不是同步。这是一个固定版本:

function initialSearch() {
    var xhr = new XMLHttpRequest();
    xhr.addEventListener("load", function() {
        initialArray = JSON.parse(xhr.response);
    }, false);
    xhr.open('GET', "https://api-v2.soundcloud.com/charts?kind=trending&genre=soundcloud:genres:all-music&client_id=1dff55bf515582dc759594dac5ba46e9&q=");
    xhr.send();
}

但即使这样,您也会收到No 'Access-Control-Allow-Origin' header is present on the requested resource错误。这是CORS浏览器策略错误。您只能向相同的原始资源发出请求。

因此,如果您可以修改服务器代码,请从服务器执行该请求,并更改客户端AJAX请求以询问服务器中的数据。