将jquery的$(window).scrollTop()保存为PHP $ _SESSION ['scroll_pos']变量

时间:2014-03-21 16:40:17

标签: javascript php jquery session

我将post数据发送到运行MySql语句的页面,然后通过页面重定向返回

header("location: {$_SERVER['HTTP-REFERER']}");

我正在尝试使用Ajax$(window).scrollTop()值作为$_GET['scroll_pos']变量发送,如下所示:

<?php session_start(); ?>

$(document).ready(function(){

    // SET SCROLL SESSION VARIABLE
    $(window).scroll(function(){

        var xmlhttp;

        if( window.XMLHttpRequest ){
            xmlhttp = new XMLHttpRequest();
        } else {
            xmlhttp = new ActiveXObject( 'Microsoft.XMLHTTP' );
        }

        xmlhttp.open('GET', 'script_files/set_scroll_session.php?scroll_pos=' +
          $(window).scrollTop(), true);
        xmlhttp.send();

    });

    // SCROLL TO $_SESSION['scroll_pos'];
    $(window).scrollTop(<?php echo json_encode($_SESSION['scroll_pos']); ?>); // <-- THIS IS NOT FIRING

});

set_scroll_session.php页面将$_GET['scroll_pos']保存为$_SESSION['scroll_pos']变量,如此

<?php

    session_start();

    // VARIABLES
    $scroll_pos = $_GET['scroll_pos'];

    $_SESSION['scroll_pos'] = $scroll_pos;

?>
需要调用

,如上面的$(document).ready()函数所示。

窗口没有滚动到$_SESSION['scroll_pos']变量中指定的数量,怎么回事?

1 个答案:

答案 0 :(得分:1)

首先,你已经在使用jquery了,所以我强烈推荐(但是,没有必要)使用jAXys构建的AJAX方法。

https://api.jquery.com/jQuery.ajax/

它不起作用的原因是因为你不能echo在这样的javascript中使用一个值,你必须使用AJAX来获取该值,然后设置滚动位置。

//WILL NOT WORK!!!!
$(window).scrollTop(<?php echo json_encode($_SESSION['scroll_pos']); ?>);

或者更好的是,将滚动位置保存在cookie或本地存储中,以避免对服务器进行不必要的调用...

相关问题