javascript - 在 localStorage 中存储变量太慢

标签 javascript jquery html jquery-mobile

我有两个 jQuery 移动页面(#list 和 #show)。 #list 页面上有几项具有不同的 ID。如果我点击第 5 项,ID 5 将存储在 localStorage 中,我将被重定向到页面 #show

现在的问题是: 将 ID 存储在 localStorage 中是可行的,但下一页显示的不是项目 5,而是显示一个旧项目,它之前在 localStorage 中。

来自页面 #list 的脚本

localStorage.setItem("garageID", $(this).attr('id'));                           
window.location.replace("#show");

最佳答案

我也遇到过这个问题(不是在移动设备上:在 Chromium/linux 上)。

由于似乎没有基于回调的 API,我用超时“修复”了它,“防止”页面在 setItem 操作完成之前关闭:

localStorage.setItem(name, value);                           
setTimeout(function(){
     // change location
}, 50);

0 的超时可能就足够了,但由于我没有找到任何规范(它可能在错误领域)并且问题没有始终如一地重现,所以我没有捕获任何机会.如果你愿意,你可以在一个循环中测试:

function setLocalStorageAndLeave(name, value, newLocation){
    value = value.toString(); // to prevent infinite loops
    localStorage.setItem(name, value);
    (function one(){
         if (localStorage.getItem(name) === value) {
            window.location = newLocation;
         } else {
            setTimeout(one, 30);
         }
    })();
}

但我不知道 localStorage.getItem 返回正确值的事实如何保证它真正以永久方式写入,因为没有可中断行为的规范,我不知道如果the following part of the spec可以合法地解释为允许浏览器在离开页面时忘记转储到磁盘上:

This specification does not require that the above methods wait until the data has been physically written to disk. Only consistency in what different scripts accessing the same underlying list of key/value pairs see is required.

在您的确切情况下,解决方案可能是简单地滚动到具有给定名称的元素以避免更改页面。

关于假定错误的注释:

我没有找到也没有填写任何错误报告,因为我发现它很难重现。在我观察到的 Chromium/linux 案例中,它发生在 delete 操作中。

关于javascript - 在 localStorage 中存储变量太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21139572/

相关文章:

javascript - 通过 jQuery 更改鼠标悬停时的动态按钮文本

javascript - 调整 Twitter 按钮而不重新加载?

javascript - 在 Flask 应用程序中将变量从后端传递到前端

javascript - 从本地读取txt文件放入数组并数组放入<select>

javascript - 在 ReactJs 中通过拖放交换两个图像

javascript - 将 Superagent 包含为 AMD

javascript - socket.io 发出 404 请求

jquery - 简单地将类添加到切换 div 的链接

javascript - 我的 Javascript 游戏的坐标 - 基于 Angular ,我什么时候使用 Sin Cos 和 Tan?

javascript - 如何从文件系统匹配行获取信息?