弃用同步XMLHttpRequest,纯JavaScript

时间:2018-12-23 19:22:45

标签: javascript xmlhttprequest

我将此JavaScript代码用于API请求以获取JSON。

function loadJSON(url) {
    var xobj = new XMLHttpRequest();
    xobj.overrideMimeType('application/json');
    xobj.open('GET', url, false);
    xobj.onreadystatechange = function () {
        if (xobj.readyState == 4 && xobj.status == '200') {
            // Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
            returnval = JSON.parse(xobj.responseText);
        }
    };
    xobj.send(null);
    return returnval;
}

该代码处于鼠标单击事件中。完整的URL是用鼠标单击数据生成的。该代码仅适用于同步。我已经使用异步测试了代码,但是使用此代码无法正常工作。     xobj.open('GET',file,true,null,null);

同步后,控制台将写入:

  

[弃用]不赞成在主线程上使用同步XMLHttpRequest,因为它对最终用户的体验有不利影响。如需更多帮助,请检查https://xhr.spec.whatwg.org/

好的,嘿!这个问题有很多线程,但是我没有找到解决方案。我使用纯JavaScript,没有Ajax,没有JQuery。

1 个答案:

答案 0 :(得分:-2)

您几乎已经异步编写了它。传入回调函数以获取您的returnval

function loadJSON(url, callback) {
  var xobj = new XMLHttpRequest();
  xobj.overrideMimeType('application/json');
  xobj.open('GET', url);
  xobj.onreadystatechange = function() {
    if (xobj.readyState == 4 && xobj.status == '200') {
      returnval = JSON.parse(xobj.responseText);
      callback(returnval);
    }
  };
  xobj.send(null);
}

loadJSON('https://jsonplaceholder.typicode.com/users', function(result) {
  console.log(result)
});