你如何检查是否有使用Javascript的互联网连接?这样我可以有一些条件说"在生产过程中使用谷歌缓存版本的JQuery,在开发期间使用该版本或本地版本,具体取决于互联网连接".
我正在尝试使用HTML5在线和离线事件准确地检测浏览器何时脱机.
这是我的代码:
<script>
// FIREFOX
$(window).bind("online", applicationBackOnline);
$(window).bind("offline", applicationOffline);
//IE
window.onload = function() {
document.body.ononline = IeConnectionEvent;
document.body.onoffline = IeConnectionEvent;
}
</script>
Run Code Online (Sandbox Code Playgroud)
当我在Firefox或IE上点击"脱机工作"时,它工作正常,但是当我实际拔掉电线时它会随机工作.
检测此变化的最佳方法是什么?我想避免重复带有超时的ajax调用.
我需要一些帮助,如何使用Javascript或jQuery或任何库(如果可用)检查互联网连接.因为我正在开发一个离线应用程序,我希望在用户离线时显示一个版本,如果用户在线则显示另一个版本.
目前我正在使用此代码:
if (navigator.onLine) {
alert('online');
} else {
alert('offline');
}Run Code Online (Sandbox Code Playgroud)
但这种方法检测起来很慢.有时它只是连接到没有互联网的网络,需要5到10秒才能发出警报false(没有互联网).
我看了一下Offline.js库,但我不确定这个库在我的情况下是否有用.我不知道如何使用它
我使用jquery ajax方法向web服务器发送大量数据,客户端只在收到服务器的确认后才响应,现在假设网络连接在ajax调用的MIDDLE中丢失,那么如何检测这种情况.
$.ajax({
url:'server.php',
data:'lots of data from 200KB to 5MB',
type:'post',
success: function(data)
{
alert('Success');
//some stuff on success
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert('Failure');
//some stuff on failure
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的代码,如果让互联网断开连接,它在ajax调用中间不会出错.
注意:我无法使用超时,因为数据大小从200kb到5MB不等,服务器响应时间计算不可行.
以下是我的连接请求代码:
doLogin(this.login).then(response => {
var token = response.data.token;
localStorage.setItem('AUTH_TOKEN', JSON.stringify(token));
this.$router.push({name: 'Devices'});
});
}).catch(error => {
console.log(error.response.data.message);
});
Run Code Online (Sandbox Code Playgroud)
该catch()部分工作正常的HTTP错误(例如400,404,403...等).但是当我的服务器离线时,这个脚本就会抛出net::ERR_CONNECTION_REFUSED.有没有办法处理此错误并让前端用户知道服务器当前处于脱机状态.
这是doLogin()函数以防万一,
function doLogin(data) {
const url = 'http://localhost:3000/authenticate';
return axios.post(url,data);
}
Run Code Online (Sandbox Code Playgroud) 如果没有互联网连接,它将显示一些错误消息使用对话框,如"没有互联网连接"而不使用java.我需要使用jquery或ajax脚本警告显示...
我有一个简单的联系表单,Angular通过AJAX提交到我在Google App Engine上的应用程序.(POST处理程序使用send_mail函数向网站所有者发送电子邮件).这是客户端代码:
$http.post('', jQuery.param(user), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).success(function(data, status, headers, config) {
//...
}).error(function(data, status, headers, config) {
alert('Please check your Internet connection and try again.');
});
Run Code Online (Sandbox Code Playgroud)
显然alert()是处理所有错误.假设我的服务器端代码没有错误,我猜测App Engine返回除HTTP状态代码200以外的任何其他内容的可能性很低.但是,我仍然希望区分服务器错误和丢失连接的用户.
我正在考虑textStatus按照这个SO答案使用XMLHttpRequest ,但它似乎不可用于$http.error()回调.我还想过使用Offline.js,但我不需要它做的大部分工作,所以在这种情况下看起来像浪费的字节.
在$http.error() status我得到在脱机时为0,但我不知道这是如何跨浏览器的可靠性将是.我该怎么用?
在Facebook中,当您松开互联网连接时,您会看到一条消息"没有互联网连接.请重试?" 并且您从在线更改为离线.我希望在我的网站上.我怎样才能做到这一点?
我有一个 Blazor webasemmbly 应用程序,它使用 asp.net core 作为后端,使用 Blazor wasm 作为前端。我有一个类可以检查 HTTP 问题,例如 notfound、BadReqest 和...
public class HttpInterceptorService
{
private readonly HttpClientInterceptor _interceptor;
private readonly NavigationManager _navManager;
private readonly RefreshTokenService _refreshTokenService;
public HttpInterceptorService(HttpClientInterceptor interceptor,
NavigationManager navManager,
RefreshTokenService refreshTokenService)
{
_interceptor = interceptor;
_navManager = navManager;
_refreshTokenService = refreshTokenService;
}
public void RegisterEvent() => _interceptor.AfterSend += HandleResponse;
public void RegisterBeforeSendEvent() =>
_interceptor.BeforeSendAsync += InterceptBeforeSendAsync;
public void DisposeEvent()
{
_interceptor.AfterSend -= HandleResponse;
_interceptor.BeforeSendAsync -= InterceptBeforeSendAsync;
}
private async Task InterceptBeforeSendAsync(object sender,
HttpClientInterceptorEventArgs e) …Run Code Online (Sandbox Code Playgroud)