Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Enviar datos con AJAX y recibirlos con JSON

Estas en el tema de Enviar datos con AJAX y recibirlos con JSON en el foro de Jquery en Foros del Web. Buenas!! Tengo un problema y es que quiero enviar unos datos de un formulario para recibir unos datos en JSON del servidor. Pongo el código ...
  #1 (permalink)  
Antiguo 12/09/2017, 10:19
 
Fecha de Ingreso: octubre-2008
Mensajes: 32
Antigüedad: 15 años, 6 meses
Puntos: 0
Enviar datos con AJAX y recibirlos con JSON

Buenas!!

Tengo un problema y es que quiero enviar unos datos de un formulario para recibir unos datos en JSON del servidor.

Pongo el código haber si veis que puede estar fallando ya que no me realiza ninguna acción....

HTML:

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es">
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  6.         <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7.         <meta name="author" content="Antonio Romero">
  8.         <meta name="robots" content="noindex, nofollow">
  9.         <meta name="description" content="Aplicación para calcular el IBAN">
  10.         <title>Calcular IBAN</title>
  11.         <!-- Latest compiled and minified Bootstrap CSS -->
  12.         <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
  13.         <link rel="stylesheet" href="css/style.css" type="text/css" media="screen">
  14.         <!-- jQuery library
  15.        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> -->
  16.     </head>
  17.     <body>
  18.         <noscript>
  19.             <div class="container">
  20.                 <div class="alert alert-warning alert-dismissible fade show" role="alert">
  21.                     <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  22.                     <span aria-hidden="true">&times;</span></button>
  23.                     <p>Para la funcionalidad completa de este sitio es necesario habilitar JavaScript. Estas son las <a href="http://www.enable-javascript.com/" target="_blank">instrucciones</a> para habilitar JavaScript en su navegador web</p>
  24.                 </div>
  25.             </div>
  26.         </noscript>
  27.         <div class="container">
  28.         <header class="row justify-content-center">
  29.             <h1>Calcular IBAN</h1>
  30.         </header>
  31.         </div>
  32.         <div id="data" class="container">
  33.             <div id="calcform" class="border border-primary rounded">
  34.             <form id="calculator" action="#" method="post" accept-charset="utf-8">
  35.                 <div class="form-group">
  36.                     <label class="form-control-label" for="bank">
  37.                         <span class="badge badge-info">Entidad</span>
  38.                     </label>
  39.                     <input id="bank" name="bank" type="text" class="form-control" placeholder="Código del banco" maxlength="20">
  40.                 </div>
  41.                 <div class="form-group">
  42.                     <label class="form-control-label" for="office">
  43.                         <span class="badge badge-info">Oficina</span>
  44.                     </label>
  45.                     <input id="office" name="office" type="text" class="form-control" placeholder="Código de la oficina" maxlength="4">
  46.                 </div>
  47.                 <div class="form-group">
  48.                     <label class="form-control-label" for="DC">
  49.                         <span class="badge badge-info">DC</span>
  50.                     </label>
  51.                     <input id="DC" name="DC" type="text" class="form-control" placeholder="Dígito de control" maxlength="2">
  52.                 </div>
  53.                 <div class="form-group">
  54.                     <label class="form-control-label" for="BAC">
  55.                         <span class="badge badge-info">Número de cuenta</span>
  56.                     </label>
  57.                     <input id="BAC" name="BAC" type="text" class="form-control" placeholder="Número de la cuenta bancaria" maxlength="10">
  58.                 </div>
  59.                 <div class="form-group">
  60.                     <div class="row justify-content-center">
  61.                     <button id="calc" type="button" class="btn btn-primary">Calcular</button>
  62.                     </div>
  63.                 </div>
  64.             </form>
  65.             </div>
  66.                 <div id="msg"></div>
  67.         </div>
  68.         <div class="container">
  69.             <footer class="row justify-content-center">
  70.             <p>Diseñado y codificado por <span>Antonio Romero</span></p>
  71.             </footer>
  72.         </div>
  73.         <!-- <div class="clearfix visible-sm-block"></div> -->
  74.         <!-- jQuery library -->
  75.         <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  76.         <!-- Popper -->
  77.         <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
  78.         <!-- Latest compiled and minified Bootstrap JavaScript -->
  79.         <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
  80.         <script src="js/lib.js" type="text/javascript"></script>
  81.     </body>
  82. </html>

JS:

Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.     $('#calc').click(function(e) {
  3.         e.preventDefault();
  4.         $.ajax({
  5.                 url: 'IBAN.php',
  6.                 type: 'POST',
  7.                 data: $('#calculator').serialize(),
  8.                 beforeSend: function (obj) {
  9.                     $('#data').html('<br><img alt="loading" src="img/loading.svg">');
  10.                 },
  11.                 complete: function (obj,check) {
  12.                     if (check!="success")
  13.                     {
  14.                         $('#msg').html('<br><div class="alert alert-danger" role="alert"><p>¡Ha ocurrido un error!</p></div>');
  15.                     }
  16.                 },
  17.                 success: function (resp) {
  18.                     $('#msg').html('');
  19.                    
  20.                     if ('IBAN' in resp) {
  21.                        
  22.                         var IBAN=resp.IBAN;
  23.                         var Bank=IBAN.substr(4,4);
  24.                         var Office=IBAN.substr(8,4);
  25.                         var DC=IBAN.substr(12,2);
  26.                         var BAC=IBAN.substr(14,10);
  27.                        
  28.                         $('#data').html('<table class="table table-hover table-responsive"><thead><tr class="bg-primary"><th>Descripción</th><th>Resultado</th></tr></thead><tbody><tr><th scope="row">Banco</th><td>'+resp.NameBank+'</td></tr><tr><th scope="row">Código Banco</th><td>'+Bank+'</td></tr><tr><th scope="row">Código Sucursal</th><td>'+Office+'</td></tr><tr><th scope="row">Dígito de control</th><td>'+DC+'</td></tr><tr><th scope="row">Número de cuenta</th><td>'+BAC+'</td></tr><tr><th scope="row">IBAN</th><td>'+IBAN+'</td></tr><tr><th scope="row">BIC</th><td>'+resp.BIC+'</td></tr><tr><th scope="row">Domiciliación de cuenta</th><td>'+Bank+' '+Office+' '+DC+' '+BAC+'</td></tr></tbody></table><div class="form-group"><div class="row justify-content-center"><button id="reset" type="button" class="btn btn-primary">Nuevo</button></div></div>');
  29.                     }
  30.                     else
  31.                         {
  32.                          $('#msg').html('<br><div class="alert alert-danger" role="alert"><p>'+resp+'</p></div>');  
  33.                         }
  34.                    
  35.                 }
  36.             });
  37.         });
  38. });

PHP:

Código PHP:
Ver original
  1. <?php
  2. if (isset($_POST['bank']))
  3.  {
  4.     require_once('lib/IBAN.class.php');
  5.    
  6.     $bank=$_POST['bank'];
  7.     $office=$_POST['office'];
  8.     $DC2=$_POST['DC'];
  9.     $BAC=$_POST['BAC'];
  10.     $obj=new IBAN($bank,$office,$DC2,$BAC);
  11.      
  12.      if ($BIC=$obj->getBIC())
  13.      {
  14.          if ($NameBank=$obj->getNameBank())
  15.          {
  16.              if ($IBAN=$obj->getIBAN())
  17.              {
  18.                  header('Content-type: application/json; charset=utf-8');
  19.                  echo json_encode(array("IBAN"=>$IBAN,"NameBank"=>$NameBank,"BIC"=>$BIC));
  20.              }
  21.              else
  22.              {
  23.                  echo $obj->getError();
  24.              }
  25.          }
  26.          else
  27.          {
  28.              echo $obj->getError();
  29.          }
  30.      }
  31.      else
  32.      {
  33.          echo $obj->getError();
  34.      }
  35. }
  36. else
  37. {
  38.     echo
  39.     '<!DOCTYPE html>
  40.     <html>
  41.     <head>
  42.     <meta content="text/html; charset=UTF-8" http-equiv="content-type">
  43.     <title>Calcular IBAN</title>
  44.     <style type="text/css">
  45.     #cuerpo { position: absolute; width: 50%; height: 30%; top: 35%; left: 25%; background: red; }
  46.     img { position:relative; width: 15%; height: 45%; display:block; margin:auto; top:10%; }
  47.     p { text-align: center; color:white; font-weight:bold; font-size:22pt; }
  48.     </style>
  49.     </head>
  50.     <body>
  51.     <div id="cuerpo">
  52.     <br><img alt="OOPS" src="img/oops.jpg">
  53.     <br><p>USA EL FORMULARIO</p>
  54.     </div>
  55.     </body>
  56.     </html>';
  57. }
  58.  ?>

Gracias por adelantado!! Haber si me podéis echar una mano :D

Un saludo.
  #2 (permalink)  
Antiguo 12/09/2017, 11:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Enviar datos con AJAX y recibirlos con JSON

En el cuerpo de opciones de $.ajax(), coloca el par atributo-valor dataType: "JSON".

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 12/09/2017, 12:11
 
Fecha de Ingreso: octubre-2008
Mensajes: 32
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Enviar datos con AJAX y recibirlos con JSON

Buenas!

Lo he probado y nada... :(

No lo puse para que el datatype fuese dinámico...

El problema es que no me carga ni esto:

Código Javascript:
Ver original
  1. $('#data').html('<br><img alt="loading" src="img/loading.svg">');

Además, le he puesto un alert y tampoco me sale:
Código Javascript:
Ver original
  1. beforeSend: function (obj) {
  2.                     //alert("Envio");
  3.                     $('#msg').html('envio');
  4.                     //$('#msg').html('<br><img alt="loading" src="img/loading.svg">');

No sé que podrá ser la verdad... pero gracias por la respuesta.
  #4 (permalink)  
Antiguo 12/09/2017, 13:51
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Enviar datos con AJAX y recibirlos con JSON

Si no deseas añadir ese par atributo-valor (que es precisamente para procesar respuestas en formato JSON), puedes utilizar el método JSON.parse(). Si ninguna de ambas formas funciona, entonces el problema puede estar en el lado del servidor, es decir, desde donde viene la respuesta. Te sugiero utilizar la herramienta para desarrolladores del navegador para ver el problema que se presenta:

1. Pulsa la tecla F12. Se desplegará un panel ya sea en la parte derecha o inferior de la ventana.
2. Recarga la página.
3. Selecciona la pestaña "Network".
4. De la lista con nombres de archivos que se cargará en el panel, ubica al que corresponde con el archivo hacia el cual enviaste la petición.
5. Selecciónalo. Se cargará un panel a la derecha.
6. En ese último panel, selecciona la pestaña "Response". Allí se mostrará la respuesta del servidor.

Si ni con esto logras hallar el problema, quizá pueda estar antes, es decir, al momento de lanzar la petición. Quizá algún dato no sea correcto, como la dirección del archivo de destino, por ejemplo. En ese caso, pulsa la tecla F12 y ve directamente a la pestaña "Console". Se mostrará un mensaje en caso de que se haya producido alguna anomalía.

NOTA: Los pasos y nombres indicados son correspondientes a Google Chrome. En otros navegadores, la situación es bastante similar, difiriendo en la nomenclatura, aunque no en todos los casos.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 12/09/2017, 14:05
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Enviar datos con AJAX y recibirlos con JSON

Saludo

¿Te aparece algún error en la consola del navegador?

En mi caso, ejecutando lo que pasaste, muestra esto:

Código Javascript:
Ver original
  1. $.ajax is not a function


Y pues como no encuentra el elemento ajax de jquery,
pues por eso es que no hace nada.

Si haces un alert antes del $.ajax verás que ese si se muestra,
en cuyo caso el problema es que tu versión de jquery
no tiene la funcionalidad de ajax, y lo que te toca es buscar
la versión que la trae, en tu caso, podrías hacer uso de esta.

Código Javascript:
Ver original
  1. <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

Sin quitar la que ya tienes.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 12/09/2017 a las 14:11
  #6 (permalink)  
Antiguo 13/09/2017, 05:06
 
Fecha de Ingreso: octubre-2008
Mensajes: 32
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Enviar datos con AJAX y recibirlos con JSON

Buenas a todos.

Gracias por todas las respuestas.

Si, parece que es la librería (copie la de bootstrap)... he activado la que tenía en comentario (la de google apis) y ya funciona el ajax.

Parece ser un conflicto entre dos librerías jquery ya que he querido usar bootstrap.

Saludos y mil gracias a los dos.

Etiquetas: ajax, json
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:32.