Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/04/2008, 14:54
crujikoki
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 17 años
Puntos: 8
Re: Pasar Variable de JAVASCRIPT a variable de PHP

Yo lo hago así:

Primero hago la función con la que instanciaré el objeto ajax:
Código PHP:
function objetoAjax()
{
    var 
xmlhttp=false;
    try
    {
        
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (
e)
    {
        try
        {
           
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (
e)
        {
            
xmlhttp false;
      }
    }

    if (!
xmlhttp && typeof XMLHttpRequest!='undefined')
    {
        
xmlhttp = new XMLHttpRequest();
    }
    return 
xmlhttp;

Y luego, en mi función con la que le mandaré los datos al PHP hago esto:

Código PHP:
function miFuncion()
{
    
//obtener valores a enviar
    
    
variable1 menu.document.getElementById("miInput1").value;
    
    
variable2 menu.document.getElementById("miInput2").value;
    
    
//instanciamos el objetoAjax
    
ajax=objetoAjax();
            
    
ajax.open("POST""miPaginaDeDestino.php",true);
            
    
ajax.onreadystatechange=function()
    {
        if (
ajax.readyState==4)
        {
            
division menu.document.getElementById("miDivision");
                    
division.innerHTML ajax.responseText;
                }
            }
            
            
//esto no se que es
            
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            
            
//envio los valores
          
ajax.send("texto1="+variable1+"&texto2="+variable2);

En este caso lo paso por POST pero también lo puedes pasar por GET. Hecho esto, solo tienes que ir a la página php a la que le has enviado los datos y hacer $_POST["texto1"] para la variable1 y lo mismo para la variable2.

Otra cosa importante es el ajax.onreadystatechange, al que le asignas una función para que se ejecute en cuanto cambie. Puedes controlar varios estados del envio y recepción, pero cuando se cumple if (ajax.readyState==4) es cuando el envio y la recepción ya han finalizado.

Por último, el contenido de la respuesta de tu página PHP lo obtienes de ajax.responseText;. Que en mi caso lo inserto dentro de una division division.innerHTML = ajax.responseText;.

Para hacer que tu php mande datos de vuelta basta con que hagas un echo y ese echo es lo que aparecerá dentro del <div> al hacer division.innerHTML = ajax.responseText;.

Te pongo un ejemplo de una posible respuesta de tu PHP:

Código PHP:
<?php
    $con 
mysql_connect("xxxxxx","xxxxxxx","xxxxxx");
    if (!
$con)
      die(
'Impossible connectar: ' mysql_error());
    
mysql_select_db("yyyyyy"$con);
    
    
$sql "SELECT Poblacion FROM datos WHERE Provincia = '".$_POST['provincia']."'";
    
    
$result mysql_query($sql,$con);
    
$vector = array();
    
$poblaciones = array();
    
$num mysql_num_rows($result);
    
    if(
$num 0)
    {
        echo 
"<span class=\"standard\">Poblacion: </span><select name=\"selPoblacion\" id=\"selPoblacion\">";
        echo 
"<option value=\"0\">Todas las poblaciones</option>";

        while(
$registro mysql_fetch_array($result))
        {
            
array_push($vector,$registro['Poblacion']);
        }
        
        
$poblaciones array_unique($vector);
        
$longitud count($poblaciones);
            for(
$i=0$i $longitud$i++)
            {
                
$j $i 1;
                
$nombre array_shift($poblaciones);
                echo 
"<option value=\"$j\">".$nombre."</option>";
            }
            echo 
"</select>";
    }
    else
    {
        echo 
"error";
    }
?>
Ese es un documento que yo he usado para crear un select con las poblaciones de la provincia seleccionada anteriormente. Esa provincia la he mandado por POST y al seleccinarla en el select aparece otro select con las poblaciones que existen en mi BBDD que son de esa provincia. Y esto es todo.
Siento no explicartelo mejor.

Te he contestado, pero creo que no es el sitio adecuado para preguntar sobre el AJAX. Te creo que si te pasas por ahí quizás te contestarán mejor que yo.

Saludos!