【发布时间】:2011-10-31 16:26:20
【问题描述】:
我有一个搜索页面,其中每个搜索结果都使用 AJAX 添加到页面中。这样我可以让用户搜索例如 Led Zeppelin,然后再次搜索 Metallica,但将其添加到与之前搜索相同的结果列表中。
我的问题是当用户点击记录的链接,然后点击返回按钮,返回搜索结果。
FireFox (7) 保持页面的外观不变我离开了它,显示了完整的结果。另一方面,
IE (7,8) 和 Chrome (15) 将显示添加之前的页面任何使用 AJAX 的搜索结果,就好像它不记得我向其中添加了数据一样。
以下是我使用的代码。我尝试添加location.hash = "test";,但似乎不起作用。
// Add search result
$("#searchForm").submit(function (event) {
//location.hash = "test";
event.preventDefault();
$.post($(this).attr('action'), $(this).serialize(),
function (data) {
$("tbody").append(data);
});
});
我不需要一个后退按钮来跟踪搜索页面上的更改,例如在添加每个不同的搜索结果时单步执行。我只希望浏览器在我点击后退按钮时记住最后的搜索结果。
已解决
更改为 document.location.hash = "latest search" 并没有改变任何东西。正如 Amir 指出的那样,我必须使用 localStorage。
这进入了 jQuery 代码的其余部分:
// Replace the search result table on load.
if (('localStorage' in window) && window['localStorage'] !== null) {
if ('myTable' in localStorage && window.location.hash) {
$("#myTable").html(localStorage.getItem('myTable'));
}
}
// Save the search result table when leaving the page.
$(window).unload(function () {
if (('localStorage' in window) && window['localStorage'] !== null) {
var form = $("#myTable").html();
localStorage.setItem('myTable', form);
}
});
【问题讨论】:
-
懒人的解决方法是在所有链接上使用
target="_blank"。这样后退按钮就不会有问题了。