1

index.phpcallSession04.php. 現在のページとページごとの行を保存するためにPHP SESSION変数が設定されていますが、PHP index.phpSESSION変数ではリフレッシュするまで初期状態のままですcallSession04.phpindex.phpindex.php

ここで例を見ることができます.各AJAXリクエストの前にページを更新する必要があります:

http://www.sanchezvalero.com/DWS/pracSESIONES/ej4/session04.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>";
?>

F5 キーを押さずに index.php の PHP SESSION VARS を更新する方法を知る必要があります。

4

2 に答える 2

3

最後に、これ、ソリューション、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);
?>
于 2013-11-21T15:33:24.140 に答える
2

セッション状態はサーバー上にあり、コードはサーバー上でそれを正しく更新します(私は思います)。あなたが経験しているのは、Ajax 呼び出しの後、クライアント (ブラウザー) でサーバー状態 (index.php) の表現が更新されていないことです。

それを修正するには、複数のオプションがあります。

  • ajax コールバックを使用して現在のページをリロードします (index.php)
  • ajax コールバックを使用して現在のページを更新し (DOM 操作)、サーバーの状態を反映します。

これは、php (サーバー側) だけでは修正できません。

于 2013-10-16T09:25:41.217 に答える