Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: :ohk<any> en 15 Julio 2014, 14:54 pm



Título: Problema en Jquery (ajax)
Publicado por: :ohk<any> en 15 Julio 2014, 14:54 pm
Tengo un problema en la ejecución de un pedazo de cógido de javascript, que no entiendo porque no funciona quizá me puedan dar una mano.

Tengo mi documento 1.

Código
  1.          $("#codigo").blur(function(){
  2.  
  3.     $.ajax({
  4.     beforeSend: function(){
  5.     $('#status').html("Revisando...");
  6.     },
  7.     url: 'check.producto.php',
  8.     type: 'post',
  9.     data: $('#formid').serialize(),
  10.     success: function(resp){
  11.  
  12.     alert(resp);
  13.  
  14.     if(resp == "Existe"){
  15.     $("#codigo").attr("class", "form-control error");
  16.     $("#codigo").attr("style", "border-color: red;");
  17.     $("#status").html("<span class='form-error help-block'>Este codigo ya existe.</span>");
  18.     console.log(resp);
  19.     }else{
  20. $("#codigo").attr('class', 'form-control valid');
  21. $("#status").html("<span class='form-valid help-block'>Codigo nuevo.</span>");
  22.     console.log(resp);
  23.     }
  24.  
  25.                                console.log(resp);
  26.  
  27.     },
  28.     error: function(jqXHR, estado, error){
  29.     console.log(estado)
  30.     console.log(error)
  31.     },
  32.     complete: function(jqXHR, estado){
  33.     console.log(estado)
  34.     },
  35.     timeout: 10000
  36.     });
  37.  
  38.    });
  39.  

Acá tengo el formulario

Código
  1. <label for="codigo">
  2. <strong>Codigo:</strong>
  3. <input type="text" name="codigo" id="codigo" data-validation="required" class="form-control"/>
  4. <div id="status"></div>
  5. </label>
  6.  

El caso es que tengo un formulario de varios campos, una vez que se pierde el focus sobre el campo código se hace una verificación mediante ajax, de que el dato ingresado existe o no, con el siguiente código.

check.producto.php

Código
  1. <?php
  2.  
  3. require("../../system/config/database.php");
  4. require("../../system/database/DBMySQLi.php");
  5.  
  6. $db = new DB();
  7. $codigo = $_POST['codigo'];
  8.  
  9. $sql = "SELECT codigo FROM producto WHERE codigo = '$codigo'";
  10. $res = $db->execute($sql);
  11.  
  12. if($res->num_rows>0){
  13. echo "Existe";
  14. }else{
  15. echo "No existe";
  16. }
  17.  
  18.  
  19. ?>
  20.  

Entonces el código PHP verifica en la base de datos si el código existe o no y retorna un impreso de existe o no existe.

El problema se origina cuando entra al bucle de jquery del success:

Código
  1.                           success: function(resp){
  2.  
  3.     alert(resp);
  4.  
  5.     if(resp == "Existe"){
  6.     $("#codigo").attr("class", "form-control error");
  7.     $("#codigo").attr("style", "border-color: red;");
  8.     $("#status").html("<span class='form-error help-block'>Este codigo ya existe.</span>");
  9.     console.log(resp);
  10.     }else{
  11. $("#codigo").attr('class', 'form-control valid');
  12. $("#status").html("<span class='form-valid help-block'>Codigo nuevo.</span>");
  13.     console.log(resp);
  14.     }
  15.  
  16.                                console.log(resp);
  17.  
  18.     }
  19.  

El alert(resp); me demuestra que el valor retornado es "Existe".

Pero en el if(resp == "Existe"){ no entra al bucle.

Accede directamente al else, y en el console.log(resp); imprime "Existe".

No comprendo porque no accede por el If.

Alguna sugerencia?


Título: Re: Problema en Jquery (ajax)
Publicado por: MinusFour en 15 Julio 2014, 18:39 pm
Hmmm, es raro que no te imprima que resp es un objeto jqXHR, intenta agregar al $.ajax:

Código
  1. dataType: "text"
o

usa resp.responseText;


Título: Re: Problema en Jquery (ajax)
Publicado por: :ohk<any> en 15 Julio 2014, 19:01 pm
Ya lo hice, y tengo los mismos resultados :(


Título: Re: Problema en Jquery (ajax)
Publicado por: MinusFour en 15 Julio 2014, 19:12 pm
¿Entonces se ejecuta el else? ¿Aparece "Codigo Nuevo" en #status?


Título: Re: Problema en Jquery (ajax)
Publicado por: MinusFour en 15 Julio 2014, 19:35 pm
¿Quizás es un problema de whitespaces que no estamos viendo?

Código
  1. resp = $.trim(resp);


Título: Re: Problema en Jquery (ajax)
Publicado por: :ohk<any> en 15 Julio 2014, 21:51 pm
¿Entonces se ejecuta el else? ¿Aparece "Codigo Nuevo" en #status?

Exacto, es lo que me sale.

Voy a probar tu ultima sugerencia...


Título: Re: Problema en Jquery (ajax)
Publicado por: :ohk<any> en 15 Julio 2014, 21:56 pm
Que problema mas sencillo de resolver y estuve como 3 horas jodiendo mi código sin necesidad.

a mi documento check.producto.php le agregue como 20 lineas en blanco, osea modifique el documento.

Y funcionó!

No entiendo nada! La cache hdp?

(http://oi60.tinypic.com/1zj1b6.jpg)

Sigo con cara de WTF  :xD


Título: Re: Problema en Jquery (ajax)
Publicado por: MinusFour en 15 Julio 2014, 21:58 pm
Exacto, es lo que me sale.

Voy a probar tu ultima sugerencia...

Otra cosa que puedes hacer es hacer indexOf()

Código
  1. if(resp.indexOf("Existe") != -1) { //Existe

Si esto ya de plano no te funciona, cambia la respuesta a Json

Código
  1. dataType: "json"

Código
  1. if(resp[0] == "Existe") { //Existe

Y en php

Código
  1.  
  2. if($res->num_rows>0){
  3. echo '["Existe"]';
  4. }else{
  5. echo '["No existe"]';
  6. }
  7.  

Edit: No se que haya pasado entonces XD

Si era un problema de la cache, asegurate que no vuelva a pasar eso:

En tu $.ajax()
Código
  1. cache: false;


Título: Re: Problema en Jquery (ajax)
Publicado por: JorgeEMX en 15 Julio 2014, 22:00 pm
Que problema mas sencillo de resolver y estuve como 3 horas jodiendo mi código sin necesidad.

a mi documento check.producto.php le agregue como 20 lineas en blanco, osea modifique el documento.

Y funcionó!

No entiendo nada! La cache hdp?

(http://oi60.tinypic.com/1zj1b6.jpg)

Sigo con cara de WTF  :xD

El caché generalmente es de los JS. Como tal no se ve problema alguno, otra cuestión podría ser la codificación de tu archivo PHP. En fin, para la otra puedes hacer un var_dump a tu respuesta para verificar que no es problema del tipo de dato que regreses.


Título: Re: Problema en Jquery (ajax)
Publicado por: MinusFour en 15 Julio 2014, 22:06 pm
El caché generalmente es de los JS. Como tal no se ve problema alguno, otra cuestión podría ser la codificación de tu archivo PHP. En fin, para la otra puedes hacer un var_dump a tu respuesta para verificar que no es problema del tipo de dato que regreses.

Yo pense lo mismo que era un problema de codificación, pero está usando caracteres ASCII ("Existe" en JS y "Existe" en PHP) y me parece que estos permanecen igual en bastantes codificaciones, a menos que estes usando algo raro como caracteres arabes o no se.

No entiendo como la cache puede estar afectando el script, si estás recibiendo "Existe", no es como si estuvieras recibiendo un "No existe" grabado en la cache del navegador.


Título: Re: Problema en Jquery (ajax)
Publicado por: JorgeEMX en 15 Julio 2014, 22:18 pm
Yo pense lo mismo que era un problema de codificación, pero está usando caracteres ASCII ("Existe" en JS y "Existe" en PHP) y me parece que estos permanecen igual en bastantes codificaciones, a menos que estes usando algo raro como caracteres arabes o no se.

No entiendo como la cache puede estar afectando el script, si estás recibiendo "Existe", no es como si estuvieras recibiendo un "No existe" grabado en la cache del navegador.

Yo nunca dije que era problema de caché, dije.. los errores de caché generalmente provienen de los archivos JS.

Ahora, existen problemas al usar archivos con codificaciones UTF-8 con BOM activado: http://es.wikipedia.org/wiki/Marca_de_orden_de_bytes_(BOM).


Título: Re: Problema en Jquery (ajax)
Publicado por: MinusFour en 15 Julio 2014, 23:00 pm
Yo nunca dije que era problema de caché, dije.. los errores de caché generalmente provienen de los archivos JS.

Ahora, existen problemas al usar archivos con codificaciones UTF-8 con BOM activado: http://es.wikipedia.org/wiki/Marca_de_orden_de_bytes_(BOM).

Ni yo dije que tu habías dicho que era un problema de la cache! Yo solo lo mencionaba :P

Y lo del BOM podría ser, quien sabe si el AJAX elimine el caracter o no, pero podría ser la razón por la cual no hacía match exactamente con "Existe".