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

12,440

You are using XMLHttpRequest wrong. Do asynchronous request instead of synchronous. Here is a fixed version:

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();
}

But even then, you will get No 'Access-Control-Allow-Origin' header is present on the requested resource error. Which is CORS browser policy error. You can only make requests to the same origin resources.

So if you can modify your server code, do that request from your server and change your client AJAX request to ask data from your server.

Share:
12,440

Related videos on Youtube

etlaM
Author by

etlaM

I hate this shit, please stop being so cocky

Updated on June 04, 2022

Comments

  • etlaM
    etlaM over 1 year

    I'm using an XMLHttpRequest to access SoundClouds Top Trending Tracks (https://api-v2.soundcloud.com/charts?kind=trending&genre=soundcloud:genres:all-music&client_id=1dff55bf515582dc759594dac5ba46e9&q=). I can't even get to parsing and all the fun stuff with it, because my console logs this error:

    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/
    

    I spend some time looking for an answer and - as far as I understand - the problem is some javascript within an request. So I looked into the SoundCloud API and found this little bit in every track's properties:

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

    So all solutions I've found to similar problems wouldn't work, as I can't change how their API works. Maybe I'm doing something completely wrong and you guys can help.

    Here is the complete function which causes the problem (I think):

    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);
    } 
    

    I call it on "DOMContentLoaded" if it changes anything.

    Maybe you can help me. Thanks.

    • Kevin B
      Kevin B over 5 years
      i mean... that ajax request is synchronous. make it asynchronous by changing false to true.
    • Kevin B
      Kevin B over 5 years
      For help with the problems this change will cause, see this question: stackoverflow.com/questions/14220321/…
  • etlaM
    etlaM over 5 years
    Thanks for your answer. I've changed my function and am now doing a callback and all that. Still I get the CORS browser policy error. How would I change the request as you mentioned? Sorry for bothering you ...
  • andnik
    andnik over 5 years
    Not bothering at all. The only way I know how to do that is to implement soundcloud request on your server as an endpoint. Then from your JS you should call that server endpoint. Let's say if you host website on http://localhost:5000/index then your endpoint would be something like http://localhost:5000/api/gettracks. Hope that gives the idea. Also will appreciate if you rate my answer.
  • James Douglas
    James Douglas almost 3 years
    Is addEventListener better than onreadystatechange?
  • andnik
    andnik almost 3 years