2011-12-12 19 views
7

Si cargo una página PHP con Jquery .load (file.php), ¿puede el archivo incluido usar las variables php que se definieron en la página que llamó a load()?Jquery load() y variables PHP

+2

Hola @ user1091856 - la bienvenida a SO. Es una buena práctica aceptar una respuesta si funciona para usted (no solo esta pregunta, sino cuatro de sus preguntas anteriores). ¡aclamaciones! – themerlinproject

Respuesta

13

Estás malentendido cómo funcionan las cosas.

  • PHP se ejecuta antes de se emite ninguna respuesta navegador para el cliente, y todo el código se ejecuta en el servidor. Las variables declaradas en su archivo PHP se destruyen después de que se haya ejecutado todo el código PHP; ellos "desaparecen".
  • JavaScript ejecuta después de que haya comenzado la respuesta del navegador, y todo el código se ejecuta en el cliente . Al "cargar" el resultado de salida del archivo PHP, no tendrá acceso a las variables de PHP, solo a la salida.

Si desea transferir ciertas variables de PHP a JavaScript, podría volcar parte de la producción en JSON en su script PHP, así:

<?PHP 
    header("Content-Type: application/json"); 

    $myVariable = "hello world"; 

    echo json_encode(array(array("myVariable" => $myVariable))); 

    /* Output looks like this: 
     [ 
      { 
       "myVariable": "hello world" 
      } 
     ] 
    */ 
?> 

Tienes JavaScript/JSON debe ser algo como esto:

$.getJSON("test.php", function(result) { 
    console.log(result[0].myVariable); 
}); 

¿Tiene sentido?

+0

Me gusta su explicación clara de * por qué * no va a funcionar y eso es cuando subí la respuesta. Pero su consejo para generar JSON con declaraciones simples de eco sin escalar es aterrador; es por eso que [json_encode()] (http://php.net/json_encode) existe. –

+0

Bien, mis disculpas. Solo estaba tratando de hacerlo lo suficientemente fácil de entender. Ha pasado un tiempo desde que usé PHP, y en el pasado no tenía que serializar JSON desde PHP, así que es malo. –

+0

Edité mi respuesta para hacer uso de 'json_encode'. –

0

ámbito de variables en el script PHP cargado por JavaScript es diferente de la página que cargó el script PHP, por lo que la respuesta es no.

pero puede definir variables globales o usar variables super globales como ($_GET, $_POST, etc.) para obtener lo que desea.

+0

Puede definir las variables pasadas por Javascript en la página de forma dinámica mediante PHP. –

+0

@WatermarkStudios 'variables pasadas por Javascript' es diferente de lo que OP está preguntando:' puede el archivo incluido usar las variables php que se definieron en la página que llamó a load() '. – fardjad

+0

Puede usarlos exactamente como describió TK Kocheran (aunque se recomienda mucho json_encode()). Tiene razón en que javascript no puede acceder directamente a las variables de PHP debido a la secuencia de carga en el ciclo de RESPUESTA, pero agregar una línea de PHP para definir una variable de Javascript con el mismo valor que la variable de PHP no es desconocida, ni ¿es una mala práctica a menos que los valores de las variables PHP sean sensibles? Usar las variables de sesión probablemente sería mejor si los datos confidenciales son un problema. –

13

No, usted tiene que pasar las variables que desea utilizar para su file.php:

$('#yourdiv').load('file.php?var1=xyz&var2=xyz&var3=xyz'); 

Y entonces usted puede conseguir los de su archivo.php:

$var1 = $_GET['var1']; 
$var2 = $_GET['var2']; 
$var3 = $_GET['var3']; 

Si hay una Muchas variables luego usan el método POST:

$('#yourdiv').load('file.php', {var1:x, var2:y, var3:z}) 

Y luego obtenga las variables en file.php:

$var1 = $_POST['var1']; 
$var2 = $_POST['var2']; 
$var3 = $_POST['var3']; 
+0

Esto también funciona ... Simplemente reemplazaría '' file.php? Var1 = xyz & var2 = xyz & var3 = xyz'' con ''file.php? Var1 = {$ xyz} & var2 = {$ xyz} & var3 = {$ xyz} '' si está utilizando variables rellenas del archivo PHP actual. Una vez más, toda la línea debería hacerse eco desde dentro de las etiquetas PHP. –

+0

Aprecio mucho este método ya que usa la función jQuery 'carga' nativa. – RCNeil

0

Tendría que pasar esas variables al archivo PHP cargado a través de la función .load.

Ejemplo:

$("#objectID").load("test.php", { 'choices[]': ["{$choice1}", "{$choice2}"] }); 

Las variables definidas en el archivo PHP actual pasarían a formar parte del Javascript que carga el nuevo archivo PHP.

+0

Por supuesto, esta línea debería repetirse desde etiquetas PHP. –

5

Sí, utilice el parámetro de datos, consulte http://api.jquery.com/load/:

$('#someelement').load(
    "test.php", 
    { 
     'key1': '<?php echo $value1; ?>', 
     'key2': '<?php echo $value2; ?>' 
    } 
); 

Los parámetros se registran en el archivo test.php y son accesibles como:

$_POST['key1'] 
$_POST['key2'] 
+0

Esta es una solución limpia, pero tenga en cuenta que si desea usar las variables definidas en el archivo PHP actual, debe intercambiar los valores con variables PHP repetidas desde etiquetas PHP. –

0

El segundo argumento (params) de la función de carga de JQuery debe ser un objeto o una función de devolución de llamada, pero también podría ser una cadena vacía. Dependiendo de eso, la carga envía las solicitudes de envío u obtención.

Tuve la idea de cambiar automáticamente entre get y post, (por ejemplo, si se configuró una cookie), porque get es más rápido y está en caché, y la publicación es más segura.

Su peor para escribir la función de carga incluyendo el contenido dentro de la función de devolución de llamada dos veces que escribir algo así:

//get 
var url="cache_dir/my_bag.html"; 
var params=""; 
if(document.cookie){ 
    //post 
    url="post.php"; 
    params="{my:bag}"; 
    } 
$(selector).load(url,params,function(){ 
... 

    });