gpt4 book ai didi

javascript - 如何快速检测本地服务缺失?

转载 作者:行者123 更新时间:2023-12-03 10:09:28 25 4
gpt4 key购买 nike

我有一个本地应用程序,其中包含一个用于与 Web 应用程序交换 JSON 的 Web 服务器。 Web 应用程序本身是通过网络提供服务的,这意味着浏览器将它们视为跨域。

当应用程序运行时,它提供正确的跨域 header 以允许交换。但是,我想要的是快速检测应用程序是否正在运行的选项。

当前的方法是使用 AJAX 访问本地主机服务上的“心跳”URL:

pg.init.getHeartbeat = function(port) {

var url = pg.utils.baseUrl('heartbeat', port); // returns a localhost URL
$.ajax({
url: url,
type: 'GET',
async: true,
success: function(data) {
// Hooray! Application is there. Do 'hooray' stuff
},
error: function(data) {
// Whoah the bus. Application not there. Do 'no application' stuff.
}
});
};

在 Webkit 中工作得很好。 Webkit 尝试获取心跳,但很快就失败了,并且很快就失败了。

问题出在 Firefox 中。 Firefox 尝试获取心跳,需要 4 到 10 秒才能失败。看起来可能不多,但 UI 将用户移至下一步之前 4 秒会让应用感觉非常缓慢且无响应。

还有其他想法吗?据我所知,更改 iFrame 的 src 属性并捕获失败也不起作用。它不会触发错误事件。即使我可以从示例代码中触发错误,它仍然需要 4 秒,因此没有净改进。

Web 服务器端不应该有任何服务器端脚本语言(PHP 等);我需要 JavaScript 能够独立处理它。

最佳答案

如果导航器是 Firefox,您可以设置超时:

var timeoutcall = 0;
if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1)
{
timeoutcall = 100;
}
$.ajax({
url: url,
type: 'GET',
timeout: timeoutcall ,
async: true,
success: function(data) {
// Hooray! Application is there. Do 'hooray' stuff
},
error: function(data) {
// Whoah the bus. Application not there. Do 'no application' stuff.
}
});

如果超时为 0,则没有超时。因此,如果我在 Firefox 中,我将超时设置为 100 毫秒,如果我不在 Firefox 中,则将超时设置为无限制。

关于javascript - 如何快速检测本地服务缺失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30201537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com