Обновить PHP SESSION var после запроса AJAX

У меня есть index.php и callSession04.php . Когда index.php выполняет запрос AJAX, переменные PHP SESSION устанавливаются на callSession04.php для хранения текущей страницы и строк на странице, но в index.php переменные PHP SESSION остаются в качестве начального состояния, пока я не обновляю index.php

Здесь вы можете увидеть пример, нужно обновить страницу перед каждым запросом AJAX:

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

И вот код:

index.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> 

callSession04.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 SESSION VARS на index.php с помощью нажатия F5.

Наконец я решил это, решение, JSON. Не нужно обновлять PHP SESSION vars на index.php, только на callSession04.php, просто я должен использовать обратный вызов AJAX для отражения текущего состояния сервера, разбора массива JSON на index.php из callSession04.php, тогда вы можете установить новый текущий страниц и строк на страницу.

index.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> 

callSession04.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); ?> 

Состояние сеанса находится на сервере, ваш код обновляет его на сервере правильно (я полагаю). То, что вы испытываете, – это представление состояния сервера (index.php) не обновляется на клиенте (браузере) после вызова Ajax.

У вас есть несколько вариантов исправления:

  • Используйте обратный вызов ajax для перезагрузки текущей страницы (index.php)
  • Используйте обратный вызов ajax для обновления текущей страницы (манипуляция DOM), чтобы отобразить состояние сервера

Это не может быть исправлено только на стороне php (сервер).