如何在 Edge 中使用基于 AJAX 的长轮询?
How do I get AJAX-based long-polling working in Edge?
我正在尝试获得一个非常基本的长轮询框架以跨浏览器工作。我的解决方案在 Chrome 中运行良好,但我无法在 Edge 中运行。
在 Edge 中,页面加载没有错误,我可以看到(在 Edge 中按 F12)。但是,服务器没有收到任何请求(与 Chrome 不同)。浏览器开发人员工具的网络选项卡上显示的唯一流量是 jQuery 本身的下载。我可以直接浏览到我希望进行投票的 URL 并获得结果。我添加了一些控制台日志记录,这是我在 Edge 中看到的:
IIFE
Setting up polling
>> Polling
<< Polling
就是这样。在 Chrome,最后两行无限重复。
更新:我将代码和服务器从我的 PC 移到了开发服务器上。在此环境中,代码适用于 Chrome 和 边缘。我可以在 Edge 中看到网络流量并得到服务器的响应。所以这个问题似乎与我的本地环境有关,而不是 javascript 本身。
这是我的基本代码:
index.html:
<!DOCTYPE html>
<html>
<head>
<title>AJAX Polling Exploration</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="poll.js"></script>
</head>
<body>
<div id="wrapper">
...
</div>
</body>
</html>
poll.js:
$(function() {
console.log('IIFE');
// Make sure caching is off as many suggest this is required for IE
$.ajaxSetup ({
cache: false
});
function polling() {
console.log('>> polling');
$.ajax({
type: 'GET',
url: 'http://localhost:8080/result',
cache: false,
data: { name: 'Test', date: new Date().getTime() }, // Make sure the payload varies - caching again
success: function(data, textStatus, jqXHR) {
// Take action ...
//setTimeout(polling, 2000); // Apparently this is no good for IE
setTimeout(function(){ polling(); }, 2000);
}
});
console.log('<< polling');
}
//polling();
console.log('Setting up polling');
setTimeout(function(){ polling(); }, 2000);
});
关于这个主题的SO有很多类似的问题,我听从了他们的建议但无济于事。具体来说:(a) 确保 IE 的缓存关闭; (b) 使用 setTimeout()
.
的正确形式
应该是无关紧要的,但为了以防万一,localhost:8080
的应用是基于Tomcat下的Spring和运行。
(N.B。最初我的问题是我无法在 IE 中使用它。我发现我无意中使用了 jQuery 的旧版本。从Google CDN 在 IE 中运行。)
在一位同事的建议下,我将应用程序和网页移至开发服务器,即。远离我的 PC 和带有本地主机的 URL。你瞧,轮询代码在 Edge(和 Chrome 等人)下工作得很好。
所以我电脑上的 Edge 似乎与本地主机有问题。基于这些知识,我尝试了一些事情,但我一直无法找出根本原因。
不过题中的代码好像还是没问题的
我正在尝试获得一个非常基本的长轮询框架以跨浏览器工作。我的解决方案在 Chrome 中运行良好,但我无法在 Edge 中运行。
在 Edge 中,页面加载没有错误,我可以看到(在 Edge 中按 F12)。但是,服务器没有收到任何请求(与 Chrome 不同)。浏览器开发人员工具的网络选项卡上显示的唯一流量是 jQuery 本身的下载。我可以直接浏览到我希望进行投票的 URL 并获得结果。我添加了一些控制台日志记录,这是我在 Edge 中看到的:
IIFE
Setting up polling
>> Polling
<< Polling
就是这样。在 Chrome,最后两行无限重复。
更新:我将代码和服务器从我的 PC 移到了开发服务器上。在此环境中,代码适用于 Chrome 和 边缘。我可以在 Edge 中看到网络流量并得到服务器的响应。所以这个问题似乎与我的本地环境有关,而不是 javascript 本身。
这是我的基本代码:
index.html:
<!DOCTYPE html>
<html>
<head>
<title>AJAX Polling Exploration</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="poll.js"></script>
</head>
<body>
<div id="wrapper">
...
</div>
</body>
</html>
poll.js:
$(function() {
console.log('IIFE');
// Make sure caching is off as many suggest this is required for IE
$.ajaxSetup ({
cache: false
});
function polling() {
console.log('>> polling');
$.ajax({
type: 'GET',
url: 'http://localhost:8080/result',
cache: false,
data: { name: 'Test', date: new Date().getTime() }, // Make sure the payload varies - caching again
success: function(data, textStatus, jqXHR) {
// Take action ...
//setTimeout(polling, 2000); // Apparently this is no good for IE
setTimeout(function(){ polling(); }, 2000);
}
});
console.log('<< polling');
}
//polling();
console.log('Setting up polling');
setTimeout(function(){ polling(); }, 2000);
});
关于这个主题的SO有很多类似的问题,我听从了他们的建议但无济于事。具体来说:(a) 确保 IE 的缓存关闭; (b) 使用 setTimeout()
.
应该是无关紧要的,但为了以防万一,localhost:8080
的应用是基于Tomcat下的Spring和运行。
(N.B。最初我的问题是我无法在 IE 中使用它。我发现我无意中使用了 jQuery 的旧版本。从Google CDN 在 IE 中运行。)
在一位同事的建议下,我将应用程序和网页移至开发服务器,即。远离我的 PC 和带有本地主机的 URL。你瞧,轮询代码在 Edge(和 Chrome 等人)下工作得很好。
所以我电脑上的 Edge 似乎与本地主机有问题。基于这些知识,我尝试了一些事情,但我一直无法找出根本原因。
不过题中的代码好像还是没问题的