Página 1 de 1

Valor entero en JSON no lo captura por sí solo

NotaPublicado: 2017-08-30 04:03 @210
por jlozano
Buenos días.

Primero de todo, gracias por toda la ayuda que ofrecéis y la de problemas que me habéis solucionado.

Soy un total novato en el mundo de Perl (algo he hecho pero aún me encuentro en fase de aprendizaje).

La cuestión, no sabía cómo plantear la pregunta, porque no le encuentro ningún sentido.

Tengo una web con formularios donde los envío a Perl mediante Ajax.

El código de JQuery es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
  1. $("#saveProd").click(function() {
  2.             var prodGeneral = JSON.stringify($("#changeProdGenerals").serializeArray());
  3.  
  4.             $.ajax({
  5.                 type: 'POST',
  6.                 url: '/cgi-bin/saveNewProduct.pl',
  7.                 data: {
  8.                     prodGeneral: prodGeneral,
  9.  
  10.                 },
  11.                 success: function(r) {
  12.                     //location.reload();
  13.                 }
  14.             });
  15.         });
  16.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

La cuestión es que en Perl recibo la variable tal que así (así recibo los datos, eso seguro):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. use DBI;
  6. use CGI;
  7. use DBI::Profile;
  8. use IO::Handle;
  9. use File::Basename;
  10. use HTML::Entities;
  11. use JSON;
  12. use Data::Dumper;
  13.  
  14. require 'config.pl';
  15. require 'lib/cookieManager.pl';
  16. require 'lib/sessions.pl';
  17.  
  18. my $q = new CGI;
  19.  
  20. print "content-type:text/plain\n\n";
  21. my $text = decode_json( $q->param("prodGeneral") );
  22. my $idp  = $text->[0]->{value};                #TODO verificar atributos
  23. $idp .= $text->[0]->{name};                    #TODO verificar atributos
  24. print $idp;
  25.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
La cuestión es que si imprimo una cadena (name) me la imprime bien por pantalla.
Si imprimo la variable 'value', que en este caso es un entero, no me imprime nada.
Pero si imprimo las dos variables concatenadas me imprime el valor numérico.

No entiendo nada.

Si alguien me pudiera dar una pista...

Muchas gracias

Re: Valor entero en JSON no lo captura por sí solo

NotaPublicado: 2017-08-30 10:53 @495
por explorer
Bienvenido a los foros de Perl en Español, jlozano.

Yo tampoco veo nada raro...

¿No podría ser que el JSON esté mal de inicio? Por ejemplo, que cuando el valor numérico sea 0, el JSON almacene una cadena vacía.

¿Puedes publicar la parte del JSON relativa a prodGeneral, o mejor, todo el JSON (si es pequeño)?

Veo que en el código en JavaScript lo serializas y lo pasas a cadena, antes de mandarlo al perl. ¿Podemos ver el contenido del parámetro prodGeneral antes de llamar a decode_json()?

Re: Valor entero en JSON no lo captura por sí solo

NotaPublicado: 2017-09-08 05:29 @270
por jlozano
Buenas, explorer.

Perdón por la tardanza en contestar. Al final lo pude solucionar de otra manera, (sin enviar la variable, la verdad...) Gracias de todas formas, voy a molestar un poco más con otra pregunta... :wink: