javascript - 网络连接丢失时处理 Ajax
问题描述
网络连接丢失时如何处理 Ajax。Ajax 不返回任何状态并保持在“(待定)”状态。
$.ajax()
我用方法试过这个
.error: function(err){
console.log(err)
}
并且还尝试了以下错误:
function makeXMLHttpRequest(url, data, callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
console.log("makeXMLHttpRequest:",request)
if (request.readyState == 4 && request.status == 200) {
//clearTimeout(xhrTimeout); // Timeout when the upload complete
}
if(request.status >= 400 && request.status <= 511)
{
var error = new Error(request.responseText)
error.code = xhr.status
request.abort();
}
};
request.onerror = function(XMLHttpRequest, textStatus, errorThrown) {
if (XMLHttpRequest.readyState == 4) {
// HTTP error (can be checked by XMLHttpRequest.status and XMLHttpRequest.statusText)
}
else if (XMLHttpRequest.readyState == 0) {
// Network error (i.e. connection refused, access denied due to CORS, etc.)
}
else {
// something weird is happening
}
}
任何人都知道如何处理“网络连接丢失”的ajax?
请注意:网络连接丢失与超时不同。超时时,我们在 ajax 中有可用的事件,但我不是在寻找它。
解决方案
function makeXMLHttpRequest(url, data, callback) {
var request = new XMLHttpRequest();
request.timeout = 3000; // in milli seconds, so 3 seconds to wait before it timesout
request.onreadystatechange = function() {
console.log("makeXMLHttpRequest:",request)
if (request.readyState == 4 && request.status == 200) {
//clearTimeout(xhrTimeout); // Timeout when the upload complete
}
if(request.status >= 400 && request.status <= 511)
{
var error = new Error(request.responseText)
error.code = xhr.status
request.abort();
}
};
request.ontimeout = function(error) {
//handle the timeout
};
request.onerror = function(XMLHttpRequest, textStatus, errorThrown) {
if (XMLHttpRequest.readyState == 4) {
// HTTP error (can be checked by XMLHttpRequest.status and XMLHttpRequest.statusText)
}
else if (XMLHttpRequest.readyState == 0) {
// Network error (i.e. connection refused, access denied due to CORS, etc.)
}
else {
// something weird is happening
}
}
推荐阅读
- typescript - Angular 6 测试 httpclient post 方法
- asp.net-mvc - 在 Asp.net mvc 中查看模型
- angular - PrimeNG 表未重置
- java - 通过 maven 的 OpenJDK 11 + OpenJFX 11 无法在 Eclipse 2018-09 + Java 11 补丁中运行
- c++ - 为什么在 x64 构建配置上内存地址增加 54?
- java - 当我按下一个键时 onKeyUp 没有启动
- eclipse - 我正在尝试编写一个 prog 来使用 jsch api 从 java 中执行 unix 中的命令
- ruby-on-rails - 如何添加对模型的引用以使用不同的名称两次?
- azure - Azure 函数的 http 触发器给出 500 内部服务器错误
- python - 计算最高分数 - Pandas 中每个供应商的最低分数