2013-10-16 82 views
1

我有index.phpcallSession04.php。當index.php不AJAX請求的PHP會話變量上callSession04.php設置爲存儲每頁但index.php PHP的當前頁和行SESSION變量留作爲初始狀態,直到我刷新index.phpAJAX請求後刷新PHP SESSION var

你可以在這裏看到的例子,需要刷新每個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>"; 
?> 

我需要知道如何上的index.php withouth的按F5刷新PHP SESSION瓦爾。

+0

我看不出有什麼問題。在進行Ajax調用時(不刷新),它似乎工作正常。 – Manolo

回答

2

最後我解決了這個,解決方案,JSON。沒必要在index.php上刷新PHP SESSION vars,只需要在callSession04.php上,只需要使用AJAX回調來反映當前服務器狀態解析來自callSession04.php的index.php上的JSON數組,然後就可以設置新的當前頁面和行每頁瓦爾。

的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); 
?> 
1

會話狀態位於服務器上,您的代碼在服務器上正確更新它(我假設)。您遇到的是在Ajax調用之後,服務器狀態(index.php)的表示在客戶端(瀏覽器)上未更新。

你有多種選擇來解決這個問題:

  • 使用Ajax回調重新加載當前頁面(的index.php)
  • 使用Ajax回調來更新當前頁面(DOM操作),以反映服務器狀態

這不能在單獨的php(服務器端)中修復。

+0

第一個選項會更新整個頁面?因爲我不想要它。第二個選項你提到的是什麼? – hsanchez

+0

第二種方法將使用JavaScript更改頁面而不重新加載它。例如,您可以使用jQuery來減少自己的工作量。 – Thomas