0

一些动态网页在离开页面后会以某种方式记住其所有动态内容,当您在浏览器上按下后退按钮时,旧页面与您离开时完全相同(包括动态内容),其中一些甚至记得您之前关注的页面部分离开并返回后滚动到您正在查看的页面的一部分。

我有一个动态页面,它的内容会随着 ajax 调用而变化,我想让用户离开并返回页面时看到它与离开前完全一样。

任何帮助的想法表示赞赏

4

2 回答 2

0

我认为如果您导航离开页面,某些浏览器会将页面缓存一段时间。当您单击返回返回页面时,它会以之前的状态显示页面,而无需调用服务器。然而不是很可靠。您可以将函数绑定到 beforeunload 事件并将状态设置保存到 cookie。像参数一样,表单输入,甚至滚动位置。然后,当用户返回页面时,检查 cookie 中的这些设置并将页面设置为原来的样子。

于 2013-05-25T03:11:39.100 回答
0

返回用户可以通过 SESSION(假设它没有过期)和数据库存储数据。根据您计划保存的数据量,您可能只需要 SESSION(我认为存在性能问题,您可以/应该在 SESSION 中存储的数量限制?)

这是我过去所做的一个粗略示例。(通过 jQuery + REST + JSON + PHP)。如果您找到该用户的数据,请将其返回并相应地填充。

<script>

function PopulateDOMElementsWithUD(user){ /* Do stuff on the DOM with User Data */ }

function CheckForUserData(){ 

   jQuery.getJSON('/user/getActiveData', function(user){ 

     //Data was found, use it
     if(typeof(user) == 'object' && typeof(user.id) != 'undefined' && parseInt(user.id) > 0){ 
        PopulateDOMElementsWithUD(user); 
     };

   }); 
} 

$(document).ready(function(){ 

  CheckForUserData(); 

}); 
</script>

使用 PHP 等语言,您可以检查用户的会话数据,然后从数据库中获取其余数据:

<?php 
/* 
 * Assuming you already have some sort of handler for incoming XMLHTTPREQUESTs, 
 * and how that gets mapped to a method, moving along... 
 */
function getActiveData(){ 

    session_start(); 

    $user = array('id' => 0); 

    //assumes you only store the user's uid in the session
    if(isset($_SESSION['uid'])){

        /*
         * Look up the user from the database based on uid stored in the session
         * This assumes that getUserDataById() also would return 
         * the default $user value (array('id' => 0)) if no user by that id is found 
         * in the database.         
         * I've also done something similar with try...catch and throw an exception 
         * if the user doesn't exist.
         */ 

        $user = getUserDataById(intval($_SESSION['uid']));

    }

    //There are plenty of frameworks out there that handle this stuff much more elegantly, but for sake of example, this would work. 
    print serialize($user); 
    die();

}

希望有帮助!

于 2013-05-25T03:40:45.743 回答