XMLHTTPRequest Error: Synchronous XMLHttpRequest on the main thread is deprecated ... (SoundCloud API)

XMLHTTPRequest Error: Synchronous XMLHttpRequest on the main thread is deprecated ... (SoundCloud API)

我正在使用 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" 上调用它。

也许你能帮我。谢谢

您使用的 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 请求以从您的服务器请求数据。