entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Pasar valor de una variable jquery a php en la misma página de entrada index.php

Hola, soy nuevo por aqui un saludo a todos.

Aunque recientemente he realizado esta pregunta en otros foros ahora resumiendo solo me hace falta saber si es posible pasar el valor de una variable obtenida en jquery a php. Por ejemplo al cargar el index.php tengo estas dos opciones:

<!-- Opción 1 a través de POST -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script type="text/javascript"> 

var cargarInclude = 0;

$(document).ready(function(){   

    var resolucion = $( window ).width();    

    $.ajax({
        type:'POST',
        url:'views/modules/resolucionAjax.php',      
        data: { resolucion: resolucion },
        success:function(respuesta){
            console.log("Respuesta de Php:" +respuesta);
            //alert(respuesta);

            if(respuesta <= 767){
                console.log("La respuesta dentro de success es: No cargo include o cargo template móviles");                
                cargarInclude = 0;
            }
            else{
                console.log("La respuesta dentro de success es: Si cargo include o cargo template grande");               
                cargarInclude = 1;
            }            

        }

    });
 });
</script> 

Y luego en el mismo archivo intento que la reconozca con php así:

<?php echo "<p>La variable cargarInclude viene desde jquery con valor: " .$cargarInclude."</p>"; ?>

Sería posible pasar dicho valor de jquery a php?

También he intentado esta opción mas corta:

<!-- Opción 2 -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript"> 

var resolucionMoviles = false;

$(document).ready(function(){
    var width = window.innerWidth;
    var resolucion = $( window ).width();

    if(resolucion <= 767){
        console.log("No cargo include o cargo template móviles");
        cargarInclude = 0;
    }
    else{
        console.log("Si cargo include o cargo template grande");
        cargarInclude = 1;
    }
 });
</script> 

Pero tampoco se como hacerlo, es decir solo necesitaría pasar el valor obtenido en jquery cargarInclude = 0 o cargarInclude = 1 a la variable $cargarInclude

Saludos.

2 Respuestas

1voto

kahlito Puntos500

Hola de nuevo.

Después de muchos intentos y siguiendo los consejos parece que finalmente he encontrado la solución de esta manera.

Primero meto en el template general de la web antes del header este script para crear una cookie con el ancho actual de pantalla.

<!--=====================================
        COOKIE JQUERY RESPONSIVE INCLUDES ASIDE
        ======================================-->   
        <script src="<?php echo $url; ?>views/js/jquery.cookie.js"></script>
        <script type="text/javascript">
            function setScreenHWCookie() {                
                var resolucion = $( window ).width(); 
                $.cookie('ancho',resolucion);      

                return true;
            }
            setScreenHWCookie();
        </script>

Luego justo debajo le añado el valor del ancho del script anterior a php y a la vez creo la variable de cargar o no los dos includes.

 <?php        
        if($_COOKIE['ancho'] <= 767){
           //echo "No cargo includes";
            $cargarInclude = 0;
        }
        else{
            //echo "Si cargo includes";
            $cargarInclude = 1;
        }?>

Y ya luego en el resto de contenidos del template en la zona de carga de cada include.php dentro de los asides laterales le añado esta parte final en php y listo:


<?php 
if($cargarInclude == 1){

    include "modules/aside-izq.php";
        include "modules/aside-der.php";

 }
 else{
    //echo "No meto ningún include aside";
}
?>

Así parece que por fin google insight no carga o no lee o tiene en cuenta esos dos includes php aun estando debajo de 767 pixeles ya que incluso antes cuando ya desaparecían ya con el css de media queries responsive los seguía teniendo en cuenta, además ahora pasa de 39 a 75 puntos como mínimo.

No sé si es la mejor manera, supongo que se puede mejorar pero al menos parece que por ahora funciona perfectamente.

La cookie de este script la he descargado de este enlace, lo dejo aquí por si le puede servir a alguien más.

https://github.com/carhartl/jquery-cookie

Gracias magarzon por la ayuda y sugerencia, saludos.

1voto

Peter comentado

Gracias por compartir la solución. Por favor marca la respuesta como correcta.

Saludos.

3votos

magarzon Puntos30650

Creo que tienes un lío importante sobre cómo se hacen las peticiones y cómo interactúan la parte front (el html con el javascript) y la parte back (PHP). Suele pasar en PHP cuando se mezcla todo en el mismo fichero (por eso una de las ventajas de usar un framework como Laravel o Symfony es que te ponen cada cosa por separado).

Cuando haces la llamada al PHP que genera tu página, PHP compone el código fuente (HTML) y lo devuelve al navegador. El navegador entonces obtiene todos los enlaces (javascript, css, imágenes), renderiza la página y ejecuta el código javascript, entre ello, tu código del $(document).ready the jQuery.

Pero todo esto ya sucede en el navegador, el servidor PHP ya ha hecho su trabajo, la petición para él ya terminó, por lo que no hay ninguna interacción entre el jQuery y tu PHP para esa misma llamada, que creo que es lo que tú quieres.

Sí que puedes, llamar de nuevo al PHP desde jQuery y pasarle un valor (en tu primer ejemplo estarías pasando el valor resolucion, como un JSON).

Quizás con esto que te digo puedas replantear la pregunta y darte una mejor solución.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta