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