在AJAX(Javascript)中异步执行同步功能

时间:2017-09-07 15:24:06

标签: javascript ajax asynchronous

这是同步函数。我在Ajax中调用它,但是同步它是如何被弃用的。 ¿有没有办法像它是异步的那样运行它? 或者让它异步?感谢。

function fetchHeader(url, hdr) {
  try {
    var req=new XMLHttpRequest();
    req.open("HEAD", url, false);
    req.send(null);
    if(req.status== 200){
    return req.getResponseHeader(hdr);
    }
    else return false;
} catch(er) {
    return er.message;
}
  

我已尝试过,但它说:响应未定义回调不是函数

function fetchHeader(url, hdr, callback) {
 try {
  var req=new XMLHttpRequest();
  req.onreadystatechange = function() { 

    if(this.status == 200) {

      callback(req.getResponseHeader(hdr), req);
    }else{
        console.log("callback is not called");
    }
 }
 req.open("HEAD", url, true);
 req.send(null);

 } catch(er) {
  return er.message;
 }
 }
  

我称之为:

 fetchHeader(dirGen+json[i],'Last-Modified', function(header, request) {
 if (response.statusCode == 200) {
 return header;
 console.log(header);

 }else {
 console.log("Failed answer");
 }
 });

1 个答案:

答案 0 :(得分:1)

您不再需要微观管理XMLHttpRequest了。只需听取“负载”的声音。事件。实际上我建议你切换到fetchfetch返回一个promise,它将帮助您为此类事物构建更清晰的代码。但是这里有一些基础知识,告诉你如何调用一个XHR,然后在得到响应后启动另一个XHR。

var url1 = 'path/to/file'
var url2 = 'path/to/differentfile'

function onXhrError() {
  // ... handle errors
}

xhr1 = new XMLHttpRequest()

xhr1.addEventListener('load', onXhrLoad1)
xhr1.addEventListener('error', onXhrError)

xhr1.open('GET', url1)
xhr1.send()

function onXhrLoad1 (){
  var res = this.responeText

  function onXhrLoad2 (){
    var res2 = this.responeText
    // ... do stuff with second response
  }

  var xhr2 = new XMLHttpRequest()
  xhr1.addEventListener('error', onXhrError)
  xhr2.addEventListener('load', onXhrLoad2)
  xhr2.open('GET', url2)
  xhr2.open()

  // ... do other stuff with first resoponse
}
相关问题