使用 XMLHttp 和 Eventlistener 将代码重构为 fetch()
Refactoring code with XMLHttp and Eventlistener to fetch()
我有一个模态 window 的工作代码,用户在其中输入 phone 号码,点击后在本地服务器上处理请求,这取决于请求代码, 应该给些信息。
无法理解此记录类型如何转换为 fetch()。我尝试重做 MDN 代码,但在两种情况下出现错误 - 初始化发送 (json) 时,由于某种原因无法将此处理程序挂在 addEventListener('readystatechange') 上
form.addEventListener('submit', function(event){
event.preventDefault();
form.appendChild(statusMessage);
let request = new XMLHttpRequest();
request.open('GET', 'server.php');
request.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
let formData = new FormData(form);
let obj = {};
formData.forEach(function(value, key){
obj[key] = value;
});
let json = JSON.stringify(obj);
request.send(json);
request.addEventListener('readystatechange', function(){
if (request.readyState < 4){
statusMessage.innerHTML = message.loading;
} else if(request.readyState == 4 && request.status == 200){
statusMessage.innerHTML = message.success;
} else {
statusMessage.innerHTML = message.failure;
};
});
});
是否有将此类代码重构为当今标准的建议?
下面是我得到的代码
form.addEventListener('submit', function(event){
event.preventDefault();
form.appendChild(statusMessage);
let formData = new FormData(form);
let obj = {};
formData.forEach(function(value, key){
obj[key] = value;
});
let response = fetch('/server.php', {
method: 'GET',
headers: {'Content-Type': 'application/json; charset=utf-8'},
body: JSON.stringify(obj)
})
response.then(() => {
if (response.readyState < 4){
statusMessage.innerHTML = message.loading;
}
})
.then(() => {if(response.readyState == 4 && request.status == 200){
statusMessage.innerHTML = message.success;
}})
.catch(()=>statusMessage.innerHTML = message.failure );
});
readyState
未在 fetch()
中使用。相反,您可以使用 .done()
提供在返回状态为成功时执行的回调(例如 200、201),并使用 .catch()
在状态为失败时提供回调(例如4xx,500)。
转换的基础应该如下:
form.addEventListener('submit', function(event){
event.preventDefault();
form.appendChild(statusMessage);
let formData = new FormData(form);
let obj = {};
formData.forEach(function(value, key){
obj[key] = value;
});
let response = fetch('server.php', {
method: 'GET',
headers: {'Content-Type': 'application/json; charset=utf-8'},
body: JSON.stringify(obj)
});
response.done(function(responseData) {
statusMessage.innerHTML = message.success;
})
.catch(function(errorData) {
statusMessage.innerHTML = message.failure;
});
});
我有一个模态 window 的工作代码,用户在其中输入 phone 号码,点击后在本地服务器上处理请求,这取决于请求代码, 应该给些信息。
无法理解此记录类型如何转换为 fetch()。我尝试重做 MDN 代码,但在两种情况下出现错误 - 初始化发送 (json) 时,由于某种原因无法将此处理程序挂在 addEventListener('readystatechange') 上
form.addEventListener('submit', function(event){
event.preventDefault();
form.appendChild(statusMessage);
let request = new XMLHttpRequest();
request.open('GET', 'server.php');
request.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
let formData = new FormData(form);
let obj = {};
formData.forEach(function(value, key){
obj[key] = value;
});
let json = JSON.stringify(obj);
request.send(json);
request.addEventListener('readystatechange', function(){
if (request.readyState < 4){
statusMessage.innerHTML = message.loading;
} else if(request.readyState == 4 && request.status == 200){
statusMessage.innerHTML = message.success;
} else {
statusMessage.innerHTML = message.failure;
};
});
});
是否有将此类代码重构为当今标准的建议?
下面是我得到的代码
form.addEventListener('submit', function(event){
event.preventDefault();
form.appendChild(statusMessage);
let formData = new FormData(form);
let obj = {};
formData.forEach(function(value, key){
obj[key] = value;
});
let response = fetch('/server.php', {
method: 'GET',
headers: {'Content-Type': 'application/json; charset=utf-8'},
body: JSON.stringify(obj)
})
response.then(() => {
if (response.readyState < 4){
statusMessage.innerHTML = message.loading;
}
})
.then(() => {if(response.readyState == 4 && request.status == 200){
statusMessage.innerHTML = message.success;
}})
.catch(()=>statusMessage.innerHTML = message.failure );
});
readyState
未在 fetch()
中使用。相反,您可以使用 .done()
提供在返回状态为成功时执行的回调(例如 200、201),并使用 .catch()
在状态为失败时提供回调(例如4xx,500)。
转换的基础应该如下:
form.addEventListener('submit', function(event){
event.preventDefault();
form.appendChild(statusMessage);
let formData = new FormData(form);
let obj = {};
formData.forEach(function(value, key){
obj[key] = value;
});
let response = fetch('server.php', {
method: 'GET',
headers: {'Content-Type': 'application/json; charset=utf-8'},
body: JSON.stringify(obj)
});
response.done(function(responseData) {
statusMessage.innerHTML = message.success;
})
.catch(function(errorData) {
statusMessage.innerHTML = message.failure;
});
});