这是同步函数。我在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");
}
});
答案 0 :(得分:1)
您不再需要微观管理XMLHttpRequest
了。只需听取“负载”的声音。事件。实际上我建议你切换到fetch
。 fetch
返回一个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
}