【问题标题】:Failed to clear temp storage无法清除临时存储
【发布时间】:2015-09-30 05:54:42
【问题描述】:

清除临时存储失败:确定某些文件在 Web 应用程序中访问不安全,或者对文件资源进行了太多调用。安全错误

我在控制台中收到此错误。我有一个脚本名称 script.js,它会调用 ajax 来从 php 中检索数据。

知道为什么吗?

这是我的 jQuery 脚本

$(document).ready(function() {

  var loading = false;
  var docHeight = $(window).height();

  $('.timeline').css({minHeight: docHeight});

  function get_tl_post() {

    if (loading==false) {

      loading = true;

      $.ajax({
        type:"POST",
        url:"timeline.php",
        data:"data=instagram",
        beforeSend:function(){
           $('.loader').fadeIn("slow");
        },
        complete:function(){
          loading = false;
          $('.loader').fadeOut("slow");
        },
        success:function(data) {
          if(data=="error")
          {
            get_tl_post();
          }
          $(data).hide().appendTo(".timeline").fadeIn(1000); 
        }
      });
    }
  }

  $(window).scroll(function(){
    if ($(window).scrollTop() == $(document).height() - $(window).height()) {
      get_tl_post();
    }
  });
});

【问题讨论】:

  • 我们可以看看脚本吗?
  • @Jezzabeanz 当然,在描述中添加。有什么想法吗?
  • 代替if (data=="error"){ get_tl_post(); },尝试console.log(data) 并查看浏览器控制台中注销的内容。你可能会陷入无限循环。
  • 您是从 Web 服务器运行此页面吗?此外,如果出现错误,它将继续运行该功能。您可能应该重新考虑该递归。可能会添加计数器,因此它只会尝试运行一定次数。
  • 不应该你的 $(document).ready(function() { end with ...)};我在这里看不到。它看起来像一个简单的递归问题。我认为 get_tl_post() 可能会被一遍又一遍地调用。

标签: javascript jquery


【解决方案1】:

这是由于您的资源的网络映射。

换句话说,您可能在 chrome 开发工具中添加了工作区文件夹。 现在,当您尝试更改某些文件时,它会向文件系统发出请求。这可以正常工作一段时间。但是,在某些情况下,您会删除网络映射。

然后,当您尝试在浏览器上打开该网页时,它可能会或可能不会要求重新映射网络资源,但仍会尝试更新文件系统。 那就是你得到这个错误的时候。 你的脚本没有问题。

现在唯一的解决方案可能是删除缓存,然后重新启动系统。 如果问题仍然存在,您只需重新安装 chrome 即可解决此问题。

此外,有时网络映射也会导致其他几个问题。 例如,将 CSS 文件大小设置为 75MB 或更大。所以在玩网络映射的时候要注意防范。

如果您在 Mac 上...或者甚至在 Windows 上并且有 sh 可用的命令。

sudo find / -type f -size +50000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

在您的终端中点击此按钮,找出超过 50MB 的罪魁祸首个人文件。然后你可以删除它们。

注意:上面的命令是做什么的,它会找到所有大于 50MB 的单个文件,并将它们一一打印到您的终端上。

【讨论】:

    【解决方案2】:

    如果您的 ajax 调用由于某种原因失败,这可能会导致对 get_tl_post(); 的递归调用过多。

    我建议您使用error 属性进行错误处理,并避免递归调用您的函数的情况。一个想法可能是设置一个策略,例如“如果请求失败/数据有错误,请等待一段时间,然后重试。如果进行了 X 次重试,则显示错误代码并停止请求”。

    下面是一个未测试代码的例子,为了向你展示这个想法:

    var attempts = 0;
    $.ajax({
      //Rest of properties
      success: function(data) {
    
        if(data == "error") {
          if(attempts < 3) {
            setTimeout(function(){
              get_tl_post();
              ++attempts;
            }, 2000);
          } else {
            //output failure here.
          }
    
        }
    
        //Rest of code....
      }
    });
    

    【讨论】:

      【解决方案3】:

      如果我猜的话,我会说你的 timeline.php 脚本总是返回“错误”,所以你递归地进行了太多调用,浏览器会阻止它们。

      尝试消除递归函数调用,看看是否能解决问题。

      删除以下 3 行,然后重试:

      if (data == "error")
      {
          get_tl_post();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-09
        相关资源
        最近更新 更多