在IE11中,Angularjs的$http.get只会执行一次。

26 浏览
0 Comments

在IE11中,Angularjs的$http.get只会执行一次。

我正在学习angularjs,并且作为一个测试项目,我正在轮询一个返回活动进程列表(它们的进程ID)的服务器,并显示这些进程。
客户端代码如下:



  
    
    
  
  
      Processes:
      
  • {{process.pid}} is running


这在Firefox和Chrome中可以工作,但在Internet Explorer 11中不完全正常。
所有浏览器每秒钟都执行ReloadData方法,但是IE11实际上没有从服务器获取进程数据。Firefox和Chrome每秒都会获取数据。我还可以从我的服务器的输出中看到这一点,该输出记录了每个请求。
所有三个浏览器都会执行result.success中的代码,但是IE11会继续使用第一次获取的旧数据,而FireFox和Chrome会使用新获取的数据。
我已经在IE11的Web控制台中检查了警告或错误,但没有发现任何问题。
编辑:
正如所选答案所建议的,这是一个缓存问题。我已经让服务器在响应头中添加了一个'cache-control'头,值为'no-cache'。这解决了问题。

0
0 Comments

在IE11中,AngularJS的$http.get仅执行一次。

问题的原因是,IE11对于GET请求的缓存处理不同于其他浏览器。当使用$http.get进行GET请求时,IE11会默认启用缓存,导致请求只发送一次,后续的请求会直接返回缓存的结果,而不是实际的服务器数据。

解决方法是通过在请求的URL中添加一个随机参数来禁用缓存。这样每次请求的URL都是不同的,IE11就不会使用缓存,而是实际发送请求到服务器获取最新的数据。

以下是实现解决方法的代码示例:

$http.get('your/api/url?random=' + Math.random()).then(function(response) {
  // 处理获取的数据
});

通过在URL中添加`random`参数并设置为一个随机数,可以确保每次请求的URL都是不同的,从而禁用IE11的缓存机制。

使用上述方法,即可解决在IE11中AngularJS的$http.get仅执行一次的问题。

0
0 Comments

在AngularJS中,使用$http.get方法执行GET请求时,有可能在IE11中只执行一次。这可能是因为请求被缓存了,因为GET请求是可以被缓存的。而Firefox和Chrome可能已经禁用了缓存,可能是因为运行开发工具或其他原因。为了确定是否是缓存问题,可以在URL查询字符串中附加一个时间戳,如"processdata?" + (new Date()).getTime()

解决方法可以在这里找到更优雅的方式来防止IE缓存问题:Angular IE Caching issue for $http

0