在 AJAX 请求后刷新 PHP SESSION var


Refresh PHP SESSION var after AJAX request

我已经index.phpcallSession04.php了。当 AJAX 请求index.php时,PHP SESSION 变量在callSession04.php上设置为存储当前页面和每页的行数,但在index.php PHP SESSION 变量保持为初始状态,直到我刷新index.php

您可以在此处查看示例,需要在每个 AJAX 请求之前刷新页面:

http://www.sanchezvalero.com/DWS/pracSESIONES/ej4/sesion04.php

这是代码:

索引.php

<? session_start(); ?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Listado de empleados</title>
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
</head>
<body>
<div id="content" align="center"></div>
<p>
    <div align="center">
        <label for="fldRows">Resultados por página:</label>
        <input name="fldRows" type="text" id="fldRows" size="2" />
    </div>
</p>
<p>
    <div id="manage" align="center">
        <input name="btnFirst" type="button" id="btn1" value="|&lt;" />
        <input name="btnBefore" type="button" id="btn2" value="&lt;" />
        <input name="btnAfter" type="button" id="btn3" value="&gt;" />
        <input name="btnLast" type="button" id="btn4" value="&gt;|" />
        <p><a href="destroy.php">Reset</a></p>
    </div>
</p>
<script type="text/javascript">
$(document).ready(function() {
    <? if(!isset($_SESSION['rows'])){ ?>
        $("#fldRows").val("10");
    <? } else { ?>
        $("#fldRows").val("<? echo $_SESSION['rows']; ?>");
    <? } if(!isset($_SESSION['actp'])){ ?>
        $actp=0;
    <? } else { ?>
        $actp=<? echo $_SESSION['actp']; ?>;
    <? } ?>
    $.ajax({type: "GET",
            url: "callSesion04.php",
            data: "rows="+$("#fldRows").val()+"&actp="+$actp,
            success: function(data) {
                $("#content").html(data);
            }
    });
});
$("#fldRows").keyup(function() {
    if($(this).val()>=0){
        $.ajax({type: "GET",
                url: "callSesion04.php",
                data: "rows="+$(this).val()+"&actp=0",
                success: function(data) {
                    $("#content").html(data);
                }
        }); 
    }
});
$("body").on("click","#manage input",function(){
    $id=$(this).attr('id').substr($(this).attr('id').search(/'d/));
    $.ajax({type:"GET",
            url:"callSesion04.php",
            data:"pag="+$id+"&actp=<? echo $_SESSION['actp']; ?>&rows=<? echo $_SESSION['rows']; ?>",
            success: function(data) {
                $("#content").html(data);
            }
    });
});
</script> 
</body>
</html>

呼叫会话04.php

<? session_start();
$dom = new DOMDocument();
$dom->load('empleados.xml');
$empleados=$dom->getElementsByTagName('RECORD');
foreach($empleados as $empleado){
    $ids=$empleado->getElementsByTagName('ID_EMPLEADO');
    $id=$ids->item(0)->nodeValue;
    $array_ids[]=$id;
    $nombres=$empleado->getElementsByTagName('NOMBRE');
    $nombre=$nombres->item(0)->nodeValue;
    $array_nombres[]=$nombre;
    $apellidos=$empleado->getElementsByTagName('APELLIDOS');
    $apellido=$apellidos->item(0)->nodeValue;
    $array_apellidos[]=$apellido;
    $fechas=$empleado->getElementsByTagName('FECHA_NACIMIENTO');
    $fecha=$fechas->item(0)->nodeValue;
    $array_fechas[]=$fecha;
    $tipos=$empleado->getElementsByTagName('TIPO_EMPLEADO');
    $tipo=$tipos->item(0)->nodeValue;
    $array_tipos[]=$tipo;
    $hijos=$empleado->getElementsByTagName('NUM_HIJOS');
    $hijo=$hijos->item(0)->nodeValue;
    $array_hijos[]=$hijo;
}
$rows=$_GET['rows'];
$actp=$_GET['actp'];
$pag=$_GET['pag'];
$_SESSION['rows']=$rows;
if($rows>0){
    $tpag=intval(count($array_ids)/$rows);
}
if($pag=='1'){
    $actp=0;
}else if($pag=='2' && $actp>0){
    $actp--;
}else if($pag=='3' && $actp<$tpag){
    $actp++;
}else if($pag=='4'){
    $actp=$tpag;
}
$_SESSION['actp']=$actp;
$minrow=$rows*$actp;
$maxrow=$rows*$actp+$rows;
if($maxrow>count($array_ids)){
    $maxrow=count($array_ids);
}
echo "<p align='center'><strong>EMPLEADOS</strong></p>";
echo "<table border='1' cellspacing='0' cellpadding='5'>";
echo "<tr><td>ID</td><td>Nombre</td><td>Apellidos</td><td>Nacimiento</td><td>Tipo</td><td>Hijos</td></tr>";
for($i=$minrow;$i<$maxrow;$i++){
    echo "<tr><td>".$array_ids[$i]."</td><td>".$array_nombres[$i]."</td><td>".$array_apellidos[$i]."</td>
          <td>".$array_fechas[$i]."</td><td>".$array_tipos[$i]."</td><td>".$array_hijos[$i]."</td></tr>";
}   
echo "</table>";
?>

我需要知道如何在索引上刷新 PHP 会话变量.php而无需按 F5。

最后我解决了这个问题,解决方案,JSON。不需要在 index.php 上刷新 PHP SESSION vars,只需要在 callSession04.php 上刷新,只需使用 AJAX 回调来反映当前服务器状态解析索引上的 JSON 数组.php从 callSession04.php然后您可以设置新的当前页面和每页行变量。

索引.php

<? session_start(); ?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Listado de empleados</title>
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
</head>
<body>
<div id="content" align="center"></div>
<p>
    <div align="center">
        <label for="fldRows">Resultados por página:</label>
        <input name="fldRows" type="text" id="fldRows" size="2" />
    </div>
</p>
<p>
    <div id="manage" align="center">
        <input name="btnFirst" type="button" id="btn1" value="|&lt;" />
        <input name="btnBefore" type="button" id="btn2" value="&lt;" />
        <input name="btnAfter" type="button" id="btn3" value="&gt;" />
        <input name="btnLast" type="button" id="btn4" value="&gt;|" />
        <p><a href="destroy.php">Reset</a></p>
    </div>
</p>
<script type="text/javascript">
$(document).ready(function() {
    <? if(!isset($_SESSION['rows'])){ ?>
        $("#fldRows").val("10");
        $rows=10;
    <? } else { ?>
        $("#fldRows").val("<? echo $_SESSION['rows']; ?>");
        $rows=<? echo $_SESSION['rows']; ?>;
    <? } if(!isset($_SESSION['actp'])){ ?>
        $actp=0;
    <? } else { ?>
        $actp=<? echo $_SESSION['actp']; ?>;
    <? } ?>
    $.ajax({type: "GET",
            url: "callSesion04.php",
            data: "rows="+$("#fldRows").val()+"&actp="+$actp,
            success: function(data) {
                var json = $.parseJSON(data);
                $("#content").html(json.html);
            }
    });
});
$("#fldRows").keyup(function() {
    if($(this).val()>=0){
        $.ajax({type: "GET",
                url: "callSesion04.php",
                data: "rows="+$(this).val()+"&actp=0",
                success: function(data) {
                    var json = $.parseJSON(data);
                    $rows=json.rows;
                    $("#content").html(json.html);
                }
        }); 
    }
});
$("body").on("click","#manage input",function(){
    $id=$(this).attr('id').substr($(this).attr('id').search(/'d/));
    $.ajax({type:"GET",
            url:"callSesion04.php",
            data:"pag="+$id+"&actp="+$actp+"&rows="+$rows,
            success: function(data) {
                    var json = $.parseJSON(data);
                    $actp=json.actp;
                    $("#content").html(json.html);
            }
    });
});
</script> 
</body>
</html>

呼叫会话04.php

<? session_start();
$dom = new DOMDocument();
$dom->load('empleados.xml');
$empleados=$dom->getElementsByTagName('RECORD');
foreach($empleados as $empleado){
    $ids=$empleado->getElementsByTagName('ID_EMPLEADO');
    $id=$ids->item(0)->nodeValue;
    $array_ids[]=$id;
    $nombres=$empleado->getElementsByTagName('NOMBRE');
    $nombre=$nombres->item(0)->nodeValue;
    $array_nombres[]=$nombre;
    $apellidos=$empleado->getElementsByTagName('APELLIDOS');
    $apellido=$apellidos->item(0)->nodeValue;
    $array_apellidos[]=$apellido;
    $fechas=$empleado->getElementsByTagName('FECHA_NACIMIENTO');
    $fecha=$fechas->item(0)->nodeValue;
    $array_fechas[]=$fecha;
    $tipos=$empleado->getElementsByTagName('TIPO_EMPLEADO');
    $tipo=$tipos->item(0)->nodeValue;
    $array_tipos[]=$tipo;
    $hijos=$empleado->getElementsByTagName('NUM_HIJOS');
    $hijo=$hijos->item(0)->nodeValue;
    $array_hijos[]=$hijo;
}
$rows=$_GET['rows'];
$actp=$_GET['actp'];
$pag=$_GET['pag'];
if($rows>0){
    $tpag=intval(count($array_ids)/$rows);
}
if($pag=='1'){
    $actp=0;
}else if($pag=='2' && $actp>0){
    $actp--;
}else if($pag=='3' && $actp<$tpag){
    $actp++;
}else if($pag=='4'){
    $actp=$tpag;
}
$_SESSION['rows']=$rows;
$_SESSION['actp']=$actp;
$minrow=$rows*$actp;
$maxrow=$rows*$actp+$rows;
if($maxrow>count($array_ids)){
    $maxrow=count($array_ids);
}
$html = "<p align='center'><strong>EMPLEADOS</strong></p>";
$html .= "<table border='1' cellspacing='0' cellpadding='5'>";
$html .= "<tr><td>ID</td><td>Nombre</td><td>Apellidos</td><td>Nacimiento</td><td>Tipo</td><td>Hijos</td></tr>";
for($i=$minrow;$i<$maxrow;$i++){
    $html .= "<tr><td>".$array_ids[$i]."</td><td>".$array_nombres[$i]."</td><td>".$array_apellidos[$i]."</td>";
    $html .= "<td>".$array_fechas[$i]."</td><td>".$array_tipos[$i]."</td><td>".$array_hijos[$i]."</td></tr>";
}   
$html .= "</table>";
$aPag = array("rows"=>$rows,"actp"=>$actp,"html"=>$html);
echo json_encode($aPag);
?>

会话状态在服务器上,您的代码在服务器上正确更新它(我假设)。您体验到的是,在 Ajax 调用之后,服务器状态(索引.php)的表示形式不会在客户端(浏览器)上更新。

您有多种选择可以解决此问题:

  • 使用 ajax 回调重新加载当前页面(索引.php)
  • 使用 ajax 回调更新当前页面(DOM 操作)以反映服务器状态

这不能单独在php(服务器端)中修复。