在用jQuery加载的PHP模块之间传递变量

时间:2011-03-15 15:15:32

标签: php jquery session scope

我正在使用jQuery以“延迟”模式加载PHP模块,但是jQuery加载模块无法访问“主”PHP模块的变量。看起来它也无法访问会话变量。 有没有一种简单,快速和安全的方法来实现这一目标?

这是用于加载“延迟”页面的代码:

<script type="text/javascript">
    jQuery.noConflict();
    jQuery("#sidebarfeat").one('inview', function(event, isInView, visiblePartX, visiblePartY) {
        if (isInView) {
            // element is now visible in the viewport
            jQuery("#sidebarfeat").load("/wp-content/themes/tgv1/featured.php", "",
            function(responseText, textStatus, XMLHttpRequest) {
                if(textStatus == 'error') {
                    jQuery('#sidebarfeat').html('There was an error making the AJAX request');
                }});

          }
        });

</script>

上面的代码使用jQuery inview插件,但问题在于PHP环境,看起来2个PHP模块在“分离”环境中运行....

3 个答案:

答案 0 :(得分:1)

PHP不会在多个请求之间保持状态。这意味着独立的PHP无法在请求之间的内存中存储变量。会话保存到磁盘(默认情况下),配置文件需要重新分析等等。

如果你想在两个请求之间保留变量,你可以使用sessions,或者你可以json_encode()你的变量并通过jQuery再次传递它们。

服务器方面,您的XHR请求与您在浏览器中请求页面的请求相同。这是一个完全不同的要求。

至于无法访问会话变量,您需要确保调用session_start()(可能之前可能进行了session_name()调用,查看您的Cookie以确定其中的一个)你的脚本也是如此。


编辑:使用json_encode()相对简单。首先,准备要传递给关联数组的所有变量,然后调用json_encode()

$myVars = array();
$myVars['important'] = 'very';

$myJsVars = json_encode($myVars);

然后,在<head>中,将$myJsVar分配给JavaScript变量。

<script>var PHP_VARS = <?php echo $myJsVars; ?>;</script>

在jQuery中调用.load时,将变量作为第二个参数传递。

<script type="text/javascript">
    jQuery.noConflict();
    jQuery("#sidebarfeat").one('inview', function(event, isInView, visiblePartX, visiblePartY) {
        if (isInView) {
            // element is now visible in the viewport
            jQuery("#sidebarfeat").load("/wp-content/themes/tgv1/featured.php", PHP_VARS,
            function(responseText, textStatus, XMLHttpRequest) {
                if(textStatus == 'error') {
                    jQuery('#sidebarfeat').html('There was an error making the AJAX request');
                }});

          }
        });

</script>

featured.php现在可以通过$_GET访问这些变量。

答案 1 :(得分:0)

您可以尝试将session_id()传递给名为AJAX的脚本。当然,当前变量永远不会在另一个过程中可用。

答案 2 :(得分:0)

您始终可以通过data:方法的.load()参数传递相关数据。只需将值放入数组并将数组序列化为字符串。