我正在使用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模块在“分离”环境中运行....
答案 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()
参数传递相关数据。只需将值放入数组并将数组序列化为字符串。