Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法跨域附加本地存储数据_Javascript_Storage_Local - Fatal编程技术网

Javascript 无法跨域附加本地存储数据

Javascript 无法跨域附加本地存储数据,javascript,storage,local,Javascript,Storage,Local,我有一个巨大的问题,几乎没有时间去解决它。作为一个大学项目,我正在创建我的第一个用于财产搜索的移动应用程序(它不是基于不动产) 我试着用不同的钥匙,但它不起作用,我没有得到的基本知识。 基本上,我有一个Jquery移动应用程序,它有许多外部页面,这些页面有属性的详细信息,这些页面具有相同的id,但位于不同的文档中,当用户单击按钮保存时,我希望页面的标题和url保存在本地存储中,并由第三个页面“我的收藏夹”检索。我遇到的问题是,当我进入每个页面并单击“保存”时,它会覆盖本地存储中已经存在的内容,而

我有一个巨大的问题,几乎没有时间去解决它。作为一个大学项目,我正在创建我的第一个用于财产搜索的移动应用程序(它不是基于不动产) 我试着用不同的钥匙,但它不起作用,我没有得到的基本知识。 基本上,我有一个Jquery移动应用程序,它有许多外部页面,这些页面有属性的详细信息,这些页面具有相同的id,但位于不同的文档中,当用户单击按钮保存时,我希望页面的标题和url保存在本地存储中,并由第三个页面“我的收藏夹”检索。我遇到的问题是,当我进入每个页面并单击“保存”时,它会覆盖本地存储中已经存在的内容,而且似乎每个页面都有自己的存储,因此我的收藏夹页面始终只有一个收藏夹(最新的一个),而不是每次单击“保存”时都会附加一个收藏夹列表。这是我的密码:

<div data-role="header" id="samplePlacePage_hd">
    <h4 id="hutRef">add#redHut456</h4>
</div>

<div data-role="main" id="samplePlacePage_cont">

    <div id="image">
        <a href="#"><img src="images/redhut.jpeg" height="200px" width="100%" alt="Hut"></a>
    </div>

    <div id="place_title">
        <p id="hutHeading">Stunning Red Hut in Central Red Beach</p>
    </div>
    <div>
        <h4 style="float: left;">Rent: $2950pw</h4>
        <h4 style="float: right;">Deposit: 5500</h4>
    </div>

})

请帮忙


感谢您

另外两个注意事项:检查尚未添加的收藏夹,以及允许用户在您站点的页面上打开多个选项卡-添加一个页面作为收藏夹不应影响添加其他页面作为收藏夹。不要忘记,如果本地存储项不存在,请创建一个新存储项:)

基本上,我建议检索本地存储、检查重复项、更新并保存回本地存储都可以在一个单击处理程序中完成,例如,通过重新排列代码并添加几行:

$(document).on("pagecreate",function () {
    document.getElementById('hutFav').onclick = function () {

        var favoritesPlaces = localStorage.getItem("favorites");
        var heading = document.getElementById('hutHeading').innerText;
        var ref = document.getElementById('hutRef').innerText;
        var refLink = ref.replace("add#","");
        var newFav = {
            title: heading,
            link: refLink
        };

        favoritesPlaces = favoritesPlaces || '[]';    // string
        favoritesPlaces = JSON.parse(favoritesPlaces); // array
        if( !favoritesPlaces.some( fave => fave.link === refLink)) {
            favoritesPlaces.push( newFav)
            console.log(favoritesPlaces);
            localStorage.setItem("favorites",JSON.stringify(favoritesPlaces));
        }
        else {
           console.log("already a favorite");
        }
    }
})
(测试)


请注意,在任何页面上清除
localStorage
,都会清除站点中所有页面的存储。一旦清除,其在所有页面上都将被清除,不再有收藏夹,并且可以再次添加任何页面而不会重复。如果需要“从收藏夹中删除此页面”按钮,则需要编写一个新函数来执行此操作。

将该代码放在帖子中,而不是注释。您是说希望在多个页面上共享持久本地内存吗。通过Javascript实现?如果使用相同的键,它将被覆盖。您需要为每个页面设置不同的键,以保持设置。是的,Magnus,这就是我想要的,那么您的问题在这里之前已经被问过了。请参阅详细的答案,了解为什么无法执行以及如何继续。嘿,这太不可思议了,我确实发现我声明了一个空数组,这是一个问题,但您的代码太干净了,我现在要测试:),谢谢:)只是不太熟悉some()和=>,试图理解它并测试它,感谢
=>
是。并非所有浏览器都支持它们,所以最好不要在JQuery中使用它们。尝试编写自己的测试,检查收藏夹是否已经存在,如果已经存在,则不做任何操作。祝你好运。我测试了代码,它工作得很好,除了重复项只适用于第一个属性,第二次,它不会阻止我输入重复项。你在控制台上检查错误了吗?其中一个
favoritesPlaces
末尾缺少一个
s
(现在已在答案中修复)。
$(document).on("pagecreate",function () {
    document.getElementById('hutFav').onclick = function () {

        var favoritesPlaces = localStorage.getItem("favorites");
        var heading = document.getElementById('hutHeading').innerText;
        var ref = document.getElementById('hutRef').innerText;
        var refLink = ref.replace("add#","");
        var newFav = {
            title: heading,
            link: refLink
        };

        favoritesPlaces = favoritesPlaces || '[]';    // string
        favoritesPlaces = JSON.parse(favoritesPlaces); // array
        if( !favoritesPlaces.some( fave => fave.link === refLink)) {
            favoritesPlaces.push( newFav)
            console.log(favoritesPlaces);
            localStorage.setItem("favorites",JSON.stringify(favoritesPlaces));
        }
        else {
           console.log("already a favorite");
        }
    }
})