Problema en Jquery (ajax)

Iniciado por :ohk<any>, 15 Julio 2014, 14:54 PM

0 Miembros y 1 Visitante están viendo este tema.

:ohk<any>

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 (javascript) [Seleccionar]

          $("#codigo").blur(function(){

    $.ajax({
    beforeSend: function(){
    $('#status').html("Revisando...");
    },
    url: 'check.producto.php',
    type: 'post',
    data: $('#formid').serialize(),
    success: function(resp){

    alert(resp);

    if(resp == "Existe"){
    $("#codigo").attr("class", "form-control error");
    $("#codigo").attr("style", "border-color: red;");
    $("#status").html("<span class='form-error help-block'>Este codigo ya existe.</span>");
    console.log(resp);
    }else{
$("#codigo").attr('class', 'form-control valid');
$("#status").html("<span class='form-valid help-block'>Codigo nuevo.</span>");
    console.log(resp);
    }

                                console.log(resp);
   
    },
    error: function(jqXHR, estado, error){
    console.log(estado)
    console.log(error)
    },
    complete: function(jqXHR, estado){
    console.log(estado)
    },
    timeout: 10000
    });

    });


Acá tengo el formulario

Código (html4strict) [Seleccionar]

<label for="codigo">
<strong>Codigo:</strong>
<input type="text" name="codigo" id="codigo" data-validation="required" class="form-control"/>
<div id="status"></div>
</label>


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 (php) [Seleccionar]

<?php

require("../../system/config/database.php");
require(
"../../system/database/DBMySQLi.php");

$db = new DB();
$codigo $_POST['codigo'];

$sql "SELECT codigo FROM producto WHERE codigo = '$codigo'";
$res $db->execute($sql);

if(
$res->num_rows>0){
echo "Existe";
}else{
echo "No existe";
}

exit;

?>



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 (javascript) [Seleccionar]

                           success: function(resp){

    alert(resp);

    if(resp == "Existe"){
    $("#codigo").attr("class", "form-control error");
    $("#codigo").attr("style", "border-color: red;");
    $("#status").html("<span class='form-error help-block'>Este codigo ya existe.</span>");
    console.log(resp);
    }else{
$("#codigo").attr('class', 'form-control valid');
$("#status").html("<span class='form-valid help-block'>Codigo nuevo.</span>");
    console.log(resp);
    }

                                console.log(resp);
   
    }


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?
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.

MinusFour

Hmmm, es raro que no te imprima que resp es un objeto jqXHR, intenta agregar al $.ajax:

Código (javascript) [Seleccionar]

dataType: "text"

o

usa resp.responseText;

:ohk<any>

Ya lo hice, y tengo los mismos resultados :(
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.

MinusFour

¿Entonces se ejecuta el else? ¿Aparece "Codigo Nuevo" en #status?

MinusFour

#4
¿Quizás es un problema de whitespaces que no estamos viendo?

Código (javascript) [Seleccionar]

resp = $.trim(resp);

:ohk<any>

Cita de: MinusFour en 15 Julio 2014, 19:12 PM
¿Entonces se ejecuta el else? ¿Aparece "Codigo Nuevo" en #status?

Exacto, es lo que me sale.

Voy a probar tu ultima sugerencia...
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.

:ohk<any>

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?


Sigo con cara de WTF  :xD
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.

MinusFour

#7
Cita de: @ohk en 15 Julio 2014, 21:51 PM
Exacto, es lo que me sale.

Voy a probar tu ultima sugerencia...

Otra cosa que puedes hacer es hacer indexOf()

Código (javascript) [Seleccionar]

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


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

Código (javascript) [Seleccionar]

dataType: "json"


Código (javascript) [Seleccionar]

if(resp[0] == "Existe") { //Existe


Y en php

Código (php) [Seleccionar]


if($res->num_rows>0){
echo '["Existe"]';
}else{
echo '["No existe"]';
}


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 (javascript) [Seleccionar]

cache: false;

JorgeEMX

Cita de: @ohk 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?


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.

MinusFour

Cita de: JorgeEMX en 15 Julio 2014, 22:00 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.