La información completa de jquery ajax está en
https://api.jquery.com/jQuery.ajax/
1)
No mando ni recibo datos (ej: actualizar una tabla desde otra).
En este caso solo mandamos el URL del script php. Y recibimos éxito o el mensaje de error que
enviemos del script. (un string normalmente).
Ver ejemplo
2)
Mando datos pero NO recibo. (ej: Editar, borrar tablas, mail etc.).
En este caso mandamos el URL del script php, el tipo de transferencia y los datos.
Los datos van en la forma 'var1=' + valor1 + '&var2=' + valor2 + .... '&varN=' + valorN; von var1...varN
los nombres del _POST[] que recuperamos en el script PHP y valor1 ... valorN las variables con
los valores.
Y recibimos éxito o el mensaje de error que enviemos del script PHP. (un string normalmente).
Ver ejemplo
3)
Mando un/varios datos pero recibo uno. (ej: cargar un nuevo registro tablas,obtener
max(), count() etc. por SQL).
En este caso mandamos el URL del script php, el tipo de transferencia (en este caso por ser un
solo valor es
dataType: 'text',) y los datos.
Los datos van en la forma 'var1=' + valor1 + '&var2=' + valor2 + .... '&varN=' + valorN; von var1...varN
los nombres del _POST[] que recuperamos en el script PHP y valor1 ... valorN las variables con
los valores.
Y recibimos el dato que devuelve PHP o el mensaje de error que enviemos del script PHP. (un string normalmente).
Ver ejemplo , también ver en acción
el
CASO 3
4)
Mando datos y recibo varios en un array. (ej: un registro de tabla).
En este caso mandamos el URL del script php, el tipo de transferencia (como recibo un array el
tipo será:
dataType: 'json',) y los datos. El script PHP devuelve un vector jsonizado con los datos,
que recuperamos por clave (preferentemente) o índice sobre el data devuelto. En el script PHP los cargamos
directamente en el vector por clave con:
$salida = array('clave 1'=> valor1,'clave2'=> valor2,....,'clave n'=> valor n);.
Ver en acción el
CASO 4
En este caso la respuesta del script es
{"a":4,"b":6,"c":16,"d":24}
5)
Mando datos y recibo varios arrays. (ej: algunos registros de tabla).
En este caso mandamos el URL del script php, el tipo de transferencia (en este caso por ser un
solo valor es
dataType: 'json',) y los datos.
. El script PHP
devuelve un vector de vectores jsonizado con los datos, que recuperamos por clave (preferentemente) o
índice sobre el data devuelto, con un bucle
$.each(data, function(i, item) {.
Hay tres opciones en el script PHP
-
A- Si los datos son crudos de la tabla directamente uso el bloque A
Ver ejemplo (script PHP
-
B- Si los datos hay que procesarlos antes del envío uso el bloque B
Ver ejemplo (script PHP)
-
C- Los datos no vienen de una tabla uso el bloque C
Ver en acción el CASO 5
En este caso la respuesta del script es:
[{"n":"2","a12":8,"a22":10},{"n":"3","a12":12,"a22":15},{"n":"4","a12":16,"a22":20}]
6)
Subir un archivo.
Este caso está explicado en cargar un archivo por AJAX:
Ver ejemplo
7)
Mando un array, por ejemplo muchos registros para UPDATE (puedo o no recibir respuesta del script
La forma de enviar el array por AJAX es
data: {'envio': JSON.stringify(envio)}, suponiendo
que el array es "envio" y lo mandamos jsonizado con stringify().
El script php desjosoniza el envío con
$data = json_decode($_POST['envio']); y después desglosa
los subarrays con un bucle
for($i=0;$i<$filas; $i++){} con (
$filas= count($data);
) pasando cada subarray a un array temporario
$temporario = $data[$i]; y
finalmente recuperando cada valor con
$var0 = $temporario[0]; ....$varN = $temporario[N];
Ver ejemplo con envío de tabla y sin devolución
1) No mando ni recibo datos
Javascript*****************************************
<script>
$.ajax({
url: ruta,
success: function(datos){
if(datos.indexOf('exito') == 0){
// código si ocurrió con éxito
}else{
// código si ocurre el error
}
} //fin success
}); //fin ajax
</script>
Script PHP*****************************************
echo "exito"; // si hay éxito
echo "mensaje de error" // si no hay éxito
2)Mando datos pero NO recibo.
Javascript*****************************************
<script>
var a1 = $("#input1").val();
var a2 = $("#input2").val();
var a3 .....................
$.ajax({
url: ruta,
type: "POST",
data: 'dato1=' + a1 + '&dato2=' + a2 ...., //mando los datos
success: function(datos){
if(datos.indexOf('exito') == 0){
// código si ocurrió con éxito
}else{
// código si ocurre el error
}
} //fin success
}); //fin ajax
</script>
Script PHP*****************************************
$a1 = $_POST["dato1"];
$a2 = $_POST["dato2"];
// proceso los datos....
echo "exito"; // si hay éxito
echo "mensaje de error" // si no hay éxito
3)Mando un / varios datos y recibo uno.
Javascript*****************************************
<script>
$("#boton3").click(function(evento){
var entrada= $('#caso3').val();
var preparado = 'numero=' + entrada;
$.ajax({
type: "POST",
url: "tec-php-ajax-procesar.php?accion=3",
data: preparado,
dataType: 'text',
success: function(datos) {
if(datos.indexOf('Error') != 0){
$('#msg3').html(datos*2);
}else{
$('#msg3').html('El valor: ' + entrada + ' es incorrecto');
}
} //fin success
}); //fin ajax
}); //fin boton3 click
</script>
Script PHP*****************************************
$recibido= $_POST["numero"];
if($recibido==2){
echo $recibido;
}else{
echo "Error";
}
4)Mando datos y recibo varios en un array.
Javascript*****************************************
<script>
$("#boton4").click(function(evento){
var entrada1= $('#caso41').val();
var entrada2= $('#caso42').val();
var preparado = 'n1=' + entrada1 + '&n2=' + entrada2;
$.ajax({
method: "POST",
url: "tec-php-ajax-procesar.php?accion=4",
data: preparado,
dataType:'json',
success: function(datos) {
if(datos.a != 'error'){
$('#msg4').html(datos.a + " - " + datos.b + " - " + datos.c + " - " +datos.d);
}else{
$('#msg4').html('Alguno de los valores no es numerico');
}
},
error: function(request,error) {
$('#msg4').html(" ** " + error);
}
}); //fin ajax
}); //fin boton4 click
</script>
Script PHP del ejemplo (ver en acción)**************************
$n1= $_POST["n1"];
$n2= $_POST["n2"];
if (is_numeric($n1) && is_numeric($n2)){
$salida = array('a'=>$n1*2,'b'=> $n1*3,'c'=>$n2*2,'d'=> $n2*3);
echo json_encode($salida);
}else{
$salida = array('a'=>'error');
echo json_encode($salida);
}
5) Mando datos y recibo varios arrays
Javascript*****************************************
<script>
$("#boton5").click(function(evento){
var entrada1= $('#caso51').val();
var entrada2= $('#caso52').val();
var preparado = 'n1=' + entrada1 + '&n2=' + entrada2;
$.ajax({
method: "POST",
url: "tec-php-ajax-procesar.php?accion=5",
data: preparado,
dataType:'json',
success: function(datos) {
if(datos.a != 'error'){
var salida= "";
$.each(datos, function(i, item) { //i es clave item es valor
salida = salida + ('X' + item.n +' A= ' + item.a12 + ' B= ' + item.a22 + '<br/>');
});
$('#msg5').html(salida);
}else{
$('#msg5').html('Alguno de los valores no es numerico');
}
},
error: function(request,error) {
$('#msg4').html(" ** " + error);
}
}); //fin ajax
}); //fin boton5 click
</script>
Script PHP del ejemplo (ver en acción)**************************
$n1= $_POST["n1"];
$n2= $_POST["n2"];
if (is_numeric($n1) && is_numeric($n2)){
$salida[] = array('n'=>'2','a12'=>$n1*2,'a22'=> $n2*2);
$salida[] = array('n'=>'3','a12'=>$n1*3,'a22'=> $n2*3);
$salida[] = array('n'=>'4','a12'=>$n1*4,'a22'=> $n2*4);
echo json_encode($salida);
}else{
$salida = array('a'=>'error');
echo json_encode($salida);
}
5) Mando un array o "array de array"
Javascript*****************************************
<script>
envio.push(valores); //cargo valores o arrays en envio
$.ajax({
type: "POST",
url: "tec-php-editar-masivo-procesar.php?accion=A",
data: {'envio': JSON.stringify(envio)},
success: function(data) {
$("#msgtxt").html("los valores con aumento han sido guardados");
},
error: function(request,error) {
$("#msgtxt").html("ha ocurrido un error al guardar los valores");
}
}); //fin ajax
Script PHP **************************
$data = json_decode($_POST['envio']);
$filas= count($data);
for($i=0;$i<$filas; $i++){ //bucle sub-array por sub-array
$temporario = $data[$i]; //temporario contiene cada sub-array
$var0 = $temporario[0];
$var1 = $temporario[1];
.....
$varN = $temporario[N];
..... //procesamos los valores
}
echo(json_encode([.......])); //devolvemos algo (ver los otros ejemplos y pegar)
Script PHP en el caso de devolución de tablas SQL**************
$a1 = $_POST["dato1"];
$a2 = $_POST["dato2"];
// proceso los datos....
// BLOQUE A
// si se produce error $test = "error";
while ($r = mysqli_fetch_array($sqldevolucion, MYSQLI_ASSOC)){
$resultado[] = $r; // agrego a $resultado[] cada registro como sub-array
} // fin while
echo json_encode($resultado); // lo paso a json y lo exporto
// en este caso las claves son los nombres de los campos
// BLOQUE B
// si se produce error $test = "error";
while ($r = mysqli_fetch_array($sqldevolucion, MYSQLI_ASSOC)){
$a = $r["a"]..........; //proceso un campo
$b = $r["b"]..........; //proceso un campo
...........
$n = $r["n"]..........; //proceso el último campo
$resultado[] = array("a" =>$a,"b" => $b,.... "n" => $n); // agrego a $resultado[] cada registro como sub-array
} // fin while
echo json_encode($resultado); // lo paso a json y lo exporto
// en este caso las claves son los nombres que puse en el subarray.