Regresar variables a success de peticion ajax

publicado por: Anonymous

Estoy intentando regresar variables dentro del success de una peticion ajax para validar que se hizo “tal cosa” dentro del sistema, en este caso no dejarle avanzar hasta que agrege elementos a una lista.

$("#saveList").on('submit',(function(e) {         
        e.preventDefault();
        formString = $("#previewList").serialize();
            $.ajax({
                url: "lists/list.php",
                data:  formString,
                type: "GET",
                dataType: "json",
                success: function(data){
                    if(data.valida == "zero"){
                        toastr.warning("Agrega al menos un elemento a la lista");
                    }else{
                        alert("Lista guardada");
                        location.reload(true);
                    }
                },
                error: function(data){
                    console.log("error")
                }
            });
        })
    );

Y en script de lista.php la validacion la hago de esta forma, regresar una variables con el valor de string “zero” y terminar la ejecucion del script:

$result = mysqli_query($link,"SELECT * FROM lists WHERE emp = $idemp");
$count  = mysqli_num_rows($result);
// if there is no rows
if($count == 0){
    $data['valida'] = 'zero';
    echo json_encode($data);
    exit;
}

Y cuando si tengo elementos en la lista, tengo que crear un pdf, pero al momento de imprimir con el script el pdf el else de la validacion en el succes:

}else{
    alert("Lista guardada");
    location.reload(true);
}

No funciona, no hace la alerta y no refresca la pagina, mi pregunta es, hay alguna otra forma que no sea por medio de json de regresar variables del script al success del request para poder usarlas dentro del success??

solución

Tienes varios errores, y bueno una abstracción de la idea limitada. Te dejaré un ejemplo para que veas como puede interactuar de forma armoniosa el front y el back

En tu Javascript

//Con esta instrucción obligas al DOM a buscar el elemento donde se encuentre en tu documento
$(document).on('submit','#saveList',function(e){
  e.preventDefault();
  var formString = $("#previewList").serialize();
  $.ajax({
      url: "lists/list.php",
      data:  formString,
      method: "GET",
      dataType: "json",
      success: function(data){
          //Aquí validas lo que trae el nodo success ( $json['success'] )
          if( !data.success ){
              //Como el JSON trae un mensaje, lo puedes imprimir
              toastr.warning( data.message );
          }

          else{
              //Si te regresa un TRUE entonces ya puedes recargar
              toastr.success( data.message + ' ' + data.data );
              location.reload(true);
          }
      },
      error: function(data){
          console.log("error")
      }
  });
});

Ahora tu PHP, tiene varios errores de sintaxis y lógica, traté de arreglarlo y “supongo” que así lo debería de hacer tu servidor, lo puedes modificar a tu gusto.

<?php 
//Debemos recuperar primero la variable que llega, no se como se llame en el front, así que
//Modifica esta parte
$idemp = $_REQUEST['idemp'];

//Incluye tu script para la conexión
require 'mi_conexión.php';

//Preparamos un arreglo que es el que contendrá toda la información
$json = array();
$result = mysqli_query($link,"SELECT emp FROM lists WHERE emp = $idemp");
//Validamos que se haya ejecutado bien la consulta
if( !$result ){
  $json['success'] = false;
  $json['message'] = 'La consulta trono';
  $json['data'] = null;
}

else{
  //Validamos que la consulta haya retornado información
  if( mysqli_query_num_rows( $result ) <= 0 ){
    $json['success'] = false;
    $json['message'] = 'Agrega al menos un elemento a la lista';
    $json['data'] = null;
  }

  else{
    //Si hay datos entonces retornas que se guardó la lista
    $json['success'] = true;
    $json['message'] = 'Lista guardada';
    $json['data'] = 'Datos encontados ' . mysqli_query_num_rows( $result );

    //Recuerda siempre limpiar la memoria
    mysqli_free_result( $result );
  }

}
//Liberar la conexión
mysqli_close( $link );

//Retornamos el nuestro arreglo en formato JSON, recuerda agregar el encabezado, es indispensable para el navegador
//Saber que tipo de información estas enviando
header('Content-Type: application/json');
echo json_encode( $json );
?>

Recuerda agregar el script de la conexión de tu base de datos.

Espero te sirva el ejemplo, saludos.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *