AJAX - llamar a funcion php desde ajax

   
Vista:

llamar a funcion php desde ajax

Publicado por giuli (9 intervenciones) el 30/07/2016 15:47:08
buenas..estoy dando mis primeros pasos con ajax.. creo que al utilizar ajax la aplicacion o el html digamos, ya no se va a comunicar con php, sino con el script ajax y este con php.

el caso es que tengo la funcion actualizar para ejecutar un query.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function actualizar(){
 
    $fecha=date("20y-m-d");
    if (isset($_POST['tipofalta'])){
      $tipo=$_POST['tipofalta'];
 
    }else
    $tipo=1;
 
    $idalumno=htmlentities($_POST['idalu']);
    $sqlinasistencias="INSERT INTO inasistencia (fecha,idtipoinasistencia,idalumno)";
    $sqlinasistencias.=" VALUES ('".$fecha."',".$tipo.",";
    $sqlinasistencias.=$idalumno.");";
    echo $sqlinasistencias;
 
    $query=insert($conectar,$sqlinasistencias);
    if ($query==true){
        $msj= "inasistencias actualizadas correctamente";
 
    }
 
}

entonces el codigo ajax es este

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function actualizaralumnos(){
var idalumno,tipofalta,contenedor;
tipofalta=obtenerValorFalta();
idalumno=document.getElementById('idalu').value;
    ajax=nuevoAjax();
	ajax.open("POST", "consultaInasistencias.php",true);
	ajax.onreadystatechange=actualizar;
		if (ajax.readyState==4) {
			contenedor.innerHTML = ajax.responseText
	 	}
 
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send('tf='+tipofalta+'&idalu='+idalumno)
}

tomo el idalumno de la tabla html tipo de falta que viene del radiobutton, parametros que luego envio. Pero la llamada a actualizar no la ejecuta..

este es el html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<form action="" method="post" id="listado" onsubmit="acactualizaralumnos();>
  <section id="seccion">
 
            <table width="100%">
            <tr>
             
                <td width="25%" id="titulocolumna">Nombre</td>
             
                <td width="25%" id="titulocolumna">Apellido</td>
                <td width="10%" id="titulocolumna">Entera</td>
                <td width="10%"id="titulocolumna">LT 1/4</td>
                <td width="10%"id="titulocolumna">LT 1/2</td>
                <td width="10%"id="titulocolumna">RA 1/4</td>
                <td width="10%"id="titulocolumna">RA 1/2</td>
            </tr>
           
            <?php 
            if (isset($rsalumnos) && $rsalumnos!=null){
              $total=count($rsalumnos);
              $i=0;
                        foreach($rsalumnos as $alumno){$i++; ?><tr>
              <div id="$i"><input type="hidden" size="0%" name="idalu"value="<?php echo $alumno['idalumno'];?>"/>
               <td> <?php echo $alumno['nombre'];?></td> 
               <td> <?php echo $alumno['apellido']; ?></td> 
               <td> <input type="radio" value="1" name="inasistencia" id="i1" /></td>
               <td> <input type="radio" value="0.25" name="inasistencia" id="i2" /></td>
               <td> <input type="radio" value="0.5" name="inasistencia" id="i3"/></td>
               <td> <input type="radio" value="0.25" name="inasistencia" id="i4"/></td>
               <td> <input type="radio" value="0.5" name="inasistencia" id="i5"/></td>
               </tr>
               <?php }}?>
            </div>
            </table>
        
       </section>
        <input type="submit" name="Actualizar"/>
        
 </form>

les agradezco me ayuden
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

llamar a funcion php desde ajax

Publicado por Yamil Bracho (177 intervenciones) el 30/07/2016 16:00:30
En el evento onreadystatechange=actualizar, actualizar debe ser una funcion que se ejecute del lado del cliente.
Para mayor facilidad usa la consola del navegador para ver si hay errores, peticions que se estan haciendo etc..
Y lo otro usa JQuery para simplificar tu codigo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

llamar a funcion php desde ajax

Publicado por giuli (9 intervenciones) el 30/07/2016 16:03:21
gracias por tu pronta respuesta...

pero lo que quiero saber es como llamar a la funcion actualizar de php desde ajax, una vez tomados los valores y comprobado todo...

Probare usar jquery..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

llamar a funcion php desde ajax

Publicado por Vainas (71 intervenciones) el 31/07/2016 10:36:44
Buenas:

Todo lo que dice Yamil es cierto. actualizar tiene que ser una funcion en javascript. Creo que no entiendes el planteamiento de ajax. Simplemente ajax es para llamar por GET o POST a una pagina en un servidor. Como puede ser GET o POST le puedes pasar variables pero hay que entender que no puedes llamar a una funcion php sino que llamas al documento entero. Puedes hacer que tu funcion sea un .php por ejemplo. Si trabajas con MVC puedes llamar a un controlador/action pasandole parametros.

En resumen. Llamas a un documento .php o .asp o .jsp .... y este desvuelve o html o bien xml o bien json o bien texto plano entre miles.

Mira lo facil que puede ser con jQuery(ejemplo sacado de aqui http://www.w3schools.com/jquery/ajax_ajax.asp):

1
2
3
4
5
$("button").click(function(){
    $.ajax({url: "demo_test.txt", success: function(result){
        $("#div1").html(result);
    }});
});

asignas a un boton el evento click y cuando alguien hace click sobre ese boton se ejecuta la function que dentro tiene un ajax... este ajax llama a la url demo_test,txt y si todo ha ido bien (esto significa que el servidor desvuelve un codigo 200 OK) se ejecuta la funcion success y en la variable result tienes lo que viene del servidor.

Esto es ajax. Ahora te doy un ejemplo con tu codigo (recuerda que tendras que carga la libreria jQuery antes de llamar al script:

1
2
3
4
5
6
7
8
9
$("#listado").submit(function(){
    $.ajax({
            url: "consultaInasistencias.php",
            type; 'post',
            data: $("#listado").serialize(),
            success: function(result){
                    $("#div1").html(result);
    }});
});

Seria algo asi.

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llamar a funcion php desde ajax

Publicado por giuli (9 intervenciones) el 31/07/2016 14:46:14
y en que momento ejecutas la consulta? osea con tu codigo de ejemplo: como envias el idalumno y el tipo de inasistencia al sql?

bueno creo me exprese mal entonces...pero como ejecuto el query, ya sea un insert o update, esto se debe hacer con php ya que no se puede hacer con ajax por lo que tengo entendido. el documento ajax llama a un php, eso era lo que pensaba..

1
<form action="" method="post" id="listado" onsubmit="actualizaralumnos();>
en esta linea esto diciendo que al hacer click en el boton actualizar llamaria a la funcion de ajax actualizaralumnos();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function actualizaralumnos(){
var idalumno,tipofalta,contenedor;
 
tipofalta=obtenerValorFalta();
idalumno=document.getElementById('idalu').value;
    ajax=nuevoAjax();
	ajax.open("POST", "consultaInasistencias.php",true);
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			contenedor.innerHTML = ajax.responseText
	 	}
	}
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send('tf='+tipofalta+'&idalu='+idalumno)
}

entonces pense que la funcion de arriba pasa recoge el tipo de falta y el idalumno y lo envia a php, son datos que necesito para la consulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

llamar a funcion php desde ajax

Publicado por Vainas (71 intervenciones) el 31/07/2016 23:44:10
Buenas de nuevo:

como envias el idalumno y el tipo de inasistencia al sql?

No se lo envio a SQL se lo envio al php que llamo y se obtienen por $_GET o $_POST depende de por donde las envies. No lo ves por que es la magia de jQuery...

Tu haces esto en js puro:

1
ajax.send('tf='+tipofalta+'&idalu='+idalumno)

En jQuery se hace asi:

1
data: $("#listado").serialize()

#listado es el id de tu formulario y serialize toma todo lo que sea un input un checkbox etc etc y hace lo mismo que tu haces en js puro. Por eso digo que es la magia de jQuery. y como dije anteriormente lo recibes por get o post en tu php. ya lo utilizas como tu quieras para generar la consulta.

Tu haces esto js puro:

1
onsubmit="actualizaralumnos();

yo quito eso del html y pongo dentro del .js lo siguiente:

1
$("#listado").submit(function(){...

el documento ajax llama a un php, eso era lo que pensaba

y estas en lo cierto asi es.

y olvidate de esto:

1
2
ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {

Con jquery:

1
2
success: function(result){
// dentro de result tienes todo lo que mandes por echo en tu php

la funcion success ya comprueba que se envia una respuesta 200 OK y te mete en la variable result lo que viene del echo de tu php

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

llamar a funcion php desde ajax

Publicado por Vainas (71 intervenciones) el 31/07/2016 23:52:47
Perdon que sea tan pesado pero es para que vayas entendiendo cosas de javascript y ajax....

Cuando dices:

en esta linea esto diciendo que al hacer click en el boton actualizar llamaria a la funcion de ajax actualizaralumnos();

actualizaralumnos no es una funcion ajax es una funcion javascript sin mas. dentro usas el objeto ajax que llama a diferentes funciones (metodos del objeto) dentro del objeto ajax.

Son solo conceptos pero es para que vayas entendiendo.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

llamar a funcion php desde ajax

Publicado por giuli (9 intervenciones) el 05/08/2016 15:54:17
muchas gracias por tu ayuda.

Y si quiero tener varias funciones en un solo archivo php, como la que carga los select, y otra que haga el query de alumnos, como llamo con jquery a una funcion especifica dentro del script? Porque de lo contrario debo hacer script distintos para cada llamada de jquery...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

llamar a funcion php desde ajax

Publicado por Vainas (71 intervenciones) el 05/08/2016 19:54:05
Jajaja has caido en el modelo vista controlador tu solo. Busca sobre MVC y obtendras respuestas.

La forma para salir del paso seria algo como pasarle por get a tu unico php el nombre de la funcion y luego con un switch haces una llamada a tu metodo. Pero lo mejor que puedes hacer es implementar MVC en php aunque sea basico. llamas algo asi como midominio.com/controlador/action

donde controlador va a ser algo asi como tu clase php o tu archivo y la accion es tu funcion. luego puedes pasar parametros etc etc.

Mira este ejemplo. Tendras que saber algo de Objetos en php, clases, etc... http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/257

Si implementas este codigo puedes llamarlo con algo parecido a lo que he dicho arriba.

dominio.com/index.php?controlador=alumnos&accion=actualizar

Vas por buen camino. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar