Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Littl3 en 24 Mayo 2011, 19:20 pm



Título: Plugin con Jquery retornando respuesta AJAX
Publicado por: Littl3 en 24 Mayo 2011, 19:20 pm
Hola,

Llevo dias quebrandome la cabeza con esto;

Código:

//función que comprueba si el usuario existe

jQuery.fn.existe_user=function(){
$.ajax({
type: "POST",
url: "ajax/existe_user.php",
data: "nombre="+$(this).val(),
success: function(existe){return existe;}
});
}

El archivo existe_user.php esta funcionando correctamente, devuelve la id del usuario con el nombre introducido o 0 si este no existe, lo he comprobado con un alert en el success, el problema lo tengo al retornar la respuesta del plugin.

Código:

$("nombre").existe_user();


Siempre devuelve undefined.

He leido que si la conexión asincrona de ajax etc etc, pero se supone que con el success ya se hace el callback, una posible solución seria definir una variable global en el success pero quiero evitar esto.

En definitiva, no se como hacer que existe_user(); devuelva la respuesta de la petición ajax.

Un saludo.


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: bomba1990 en 24 Mayo 2011, 23:38 pm
no lo devuelve porque hace el return dentro de la funcion ajax, para que lo haga como es debido deberias almacenar el valor en una variable y despues devolverlo, creo que haci te debe funcionar.

Código
  1. jQuery.fn.existe_user=function(){
  2. var user;
  3. $.ajax({
  4. type: "POST",
  5. url: "ajax/existe_user.php",
  6. data: "nombre="+$(this).val(),
  7. success: function(existe){user= existe;}
  8. });
  9. return user;
  10. }
  11. }


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: Nakp en 25 Mayo 2011, 01:31 am
independientemente... supongo que lo que quieres retornar en realidad es "existe" y no la variable existe


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: RedZer en 25 Mayo 2011, 16:11 pm
desde mi punto de vista creo que en el archivo existe_user.php es donde deberias de validar si existe o no existe osea aras tu tipica consulta y dependiendo el resultado imprimiras existe ,o no existe..


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: marko1985 en 25 Mayo 2011, 16:37 pm
Hola,

Yo hace poco me estaba peleando con un problema casi identico, deberíamos de ver dos cosas importantes, una el código PHP que recibe la petición, yo tenía un problema de código en la variable post, pero igualmente estaría bien ver la función que evalua la peticion y por otra parte, la situación en el HTML de estas funciones de jquery. Podríamos ayudarte mucho mejor.

Venga va, ponlo y te ayudamos. Y si la encuentras por tu cuenta, postealo también así los demás no cometeremos el mismo error. Ta luego


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: Littl3 en 25 Mayo 2011, 18:28 pm
no lo devuelve porque hace el return dentro de la funcion ajax, para que lo haga como es debido deberias almacenar el valor en una variable y despues devolverlo, creo que haci te debe funcionar.


Código
  1. jQuery.fn.existe_user=function(){
  2. var user;
  3. $.ajax({
  4. type: "POST",
  5. url: "ajax/existe_user.php",
  6. data: "nombre="+$(this).val(),
  7. success: function(existe){user= existe;}
  8. });
  9. return user;
  10. }
  11. }

Gracias bomba, acabo de probarlo pero no funciona, el plugin sigue devolviendo siempre undefined, el archivo php que recibe la petición no tiene misterio, devuelve el numero de usuarios que tienen ese nombre, es decir, 0 o 1.

existe_user.php
Código
  1. <?php
  2. include ("../includes/conexion.php");
  3.  
  4. $usuario = $_POST['nombre'];
  5. $result = mysql_num_rows(mysql_query("select * from usuarios where usuario = '$usuario'")) or die (mysql_error());
  6. echo $result;
  7.  
  8. ?>

No me importa si el plugin devuelve "existe" "no existe" 0 o 1, en este caso esta pensado para que devuelva 0 o 1 el caso es que solo devuelve undefined, yo creo que es por lo que dice bomba, el return en callback de la petición ajax no hace el retorno del plugin si no de la propia petición, tiene sentido.

Vuelvo a poner el código de la petición ajax con un alert de prueba,

Plugin de jquery con petición ajax.

Código
  1.  
  2. jQuery.fn.existe_user=function(){
  3. var existe;
  4.  
  5. $.ajax({
  6. type: "POST",
  7. url: "ajax/existe_user.php",
  8. data: "nombre="+$(this).val(),
  9. success: function(data){
  10. alert(data); //TEST ALERT
  11. existe = data;}
  12. });
  13.  
  14. return existe;
  15. }


El test alert me devuelve 0 si el usuario no existe y 1 si el usuario existe, es correcto,  asi que el problema esta en sacar este dato de la petición ajax y utilizarlo como retorno del plugin.

Adjunto también la llamada al plugin que siempre devuelve undefined;

Código
  1. nombre = $("#nombre");
  2. alert(nombre.existe_user());
  3.  

Aunque la respuesta de la petición ajax a existe_user.php sea 0 o 1 la respuesta del plugin siempre es undefined...


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: moyo18 en 25 Mayo 2011, 19:14 pm
q plugin estan usando ? o tu estas haciendo un plugin ?


el codigo para obtener la respues se mira bien, ahora lo q no entiendo muy bien es q es lo q pretendes hacer con esto

Código:
nombre = $("#nombre");
alert(nombre.existe_user());


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: Littl3 en 25 Mayo 2011, 20:24 pm
El plugin me lo estoy haciendo yo, lo que pretendo sencillamente es pasarle un string con el nombre de usuario al plugin y que me devuelva true o false dependiendo de si el usuario existe o no.


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: pipook en 27 Septiembre 2011, 20:29 pm
buscando como loco en internet por el mismo error que te pasa o pasaba a ti, no se, vi este post y luego de rebuscar y rebuscar encontre una solucion la verdad no me parece por que no veo que deberia sera asi, pero la unica respuesta que consegui es la siguiente que le agregare a tu codigo, es agregar la opcion async: false, asi fue como me funciono, este post es viejo veo, pero igual como no tiene una solucion pos la pongo por si a alguien le interesa jeje

Código:
jQuery.fn.existe_user=function(){
var existe;
 
$.ajax({
type: "POST",
url: "ajax/existe_user.php",
data: "nombre="+$(this).val(),
                        async: false,
success: function(data){
alert(data); //TEST ALERT
existe = data;}
});
 
return existe;
}


Título: Re: Plugin con Jquery retornando respuesta AJAX
Publicado por: dengue8830 en 12 Diciembre 2012, 12:29 pm
Hola,

 Esto último que dices sucede porque una llamada async: true, es ejecutada, en el instante de tiempo siguiente se ejecuta la siguiente línea después de la llamada ajax. Como la llamda aún no ha terminado y por lo tanto aún no obtuvo el valor, se devuelve el valor de la variable en ese instante, osea undefined. Luego la llamada termina y sale el alert y asigna el valor, pero para entonces el resto ya se ha ejecutado.

 Al no marcarse la llamada como async: false se toma como true por defecto.

 Saludos!