Solucionado

Persistencia de variables php ajax

928 visitas 2 respuestas

Buenas tardes.

Tengo un script que trabaja como paginador, cargando via ajax otra página con los registros de una base de datos.

El paginador recoge una variable de sesión para pasarla via POST a la página de detalle, junto con una variable que lleva el número de página a mostrar. El problema es que la página que se carga recibe la variable de la página, pero no recibe la variable de sesión, a pesar de que los parámetros van concatenados.

Este es el código del paginador:

   <script type="text/javascript">
          $(document).ready(function(){
             $.urlParam = function(name){
             var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
        if (results==null){
           return null;
        }
        else{
           return results[1] || 0;
        }
    }

    var tabla = decodeURIComponent($.urlParam('lista'));
    var acorden='<?php echo isset($_SESSION["orden"]) ? $_SESSION["orden"] : 0; ?>';
    function loading_show(){
                    $('#loading').html("<img src='../Imagenes/ajax-loader.gif' />").fadeIn('fast');
          }

          function loading_hide(){
                    $('#loading').fadeOut('fast');
           }                
           function loadData(page, orden){
                    loading_show();                    
                    $.ajax
                    ({
                        type: "POST",
                        url: tabla,
                        data: "page="+page+"&orden="+acorden,
                        success: function(msg)
                        {
                            $("#jtable-main-container").ajaxComplete(function(event, request, settings)
                            {
                                loading_hide();
                                $("#jtable-main-container").html(msg);
                            });
                        }
                    });
                }
        alert(acorden);
                loadData(1, acorden);  // For first time page load default results
                $('#divpagination li.active').live('click',function(){
                    var page = $(this).attr('p');
                    loadData(page, acorden);

                });           
                $('#go_btn').live('click',function(){
                    var page = parseInt($('.goto').val());
                    var no_of_pages = parseInt($('.total').attr('a'));
                    if(page != 0 && page <= no_of_pages){
                        loadData(page, acorden);
                    }else{
                        alert('Digite una pagina entre 1 y '+no_of_pages);
                        $('.goto').val("").focus();
                        return false;
                    }

                });
            });
        </script>

Y este el código que lee los parámetros enviados por el paginador:

<?php
if($_POST['page'])
{
$page = $_POST['page'];
$cur_page = $page;
$page -= 1;
$per_page = 10;
$previous_btn = true;
$next_btn = true;
$first_btn = true;
$last_btn = true;
$start = $page * $per_page;

if(isset($_POST['orden']))
{
    if ($_POST['orden']=0)
    {
        $criterio = "";
    } else {
        $criterio = $_POST['orden'];
    }
}else {
     $criterio = "";
}

Agradezco a quien me pueda ayudar a definir qué falta en los scripts para que funcionen

Gracias de antemano

por

Registrado desde: 23 Sep 14

Respuestas

1 0

Hola,

¿Has revisado que el código Javascript se genera bien? Es decir, la parte que se encarga de enviar los parámetros está bien construida y que la variable de sesión contiene lo que debe.

De todos modos, antes de hacer eso, corrige lo siguiente, porque tiene un error en el siguiente código y al 99% solucionará el problema.

   if ($_POST['orden']=0)
    {
        $criterio = "";
    } else {
        $criterio = $_POST['orden'];
    }

Has usado una asignación en la siguiente línea, lo cual va a hacer que esa setencia siempre sea true y por tanto, nunca entrará en la otra condición.

if ($_POST['orden']=0)

cuando deberías realizar una comparación en su lugar ==

if ($_POST['orden']==0)

por desde España

Registrado desde: 02 Jul 02
0 0

Gracias por tu respuesta Javier. Ese era el problema que había. La variable si era tomada bien del lado de javascript, pero luego en el código que comentas se perdía. Muchas gracias.

por

Registrado desde: 23 Sep 14