Plugin con Jquery retornando respuesta AJAX

Iniciado por Littl3, 24 Mayo 2011, 19:20 PM

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

Littl3

Hola,

Llevo dias quebrandome la cabeza con esto;



//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.



$("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.

bomba1990

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

jQuery.fn.existe_user=function(){
var user;
$.ajax({
type: "POST",
url: "ajax/existe_user.php",
data: "nombre="+$(this).val(),
success: function(existe){user= existe;}
});
return user;
}
}
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

Nakp

independientemente... supongo que lo que quieres retornar en realidad es "existe" y no la variable existe
Ojo por ojo, y el mundo acabará ciego.

RedZer

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..
Nacido y criado entre gente que enseño a pensar antes de creer a ciegas, Todo me causa curiosidad en el mundo

marko1985

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

Littl3

#5
Cita de: 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 (javascript) [Seleccionar]

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


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 (php) [Seleccionar]
<?php
include ("../includes/conexion.php");

$usuario $_POST['nombre'];
$result mysql_num_rows(mysql_query("select * from usuarios where usuario = '$usuario'")) or die (mysql_error());
echo $result;

?>


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

jQuery.fn.existe_user=function(){
var existe;

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

return existe;
}



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

nombre = $("#nombre");
alert(nombre.existe_user());


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

moyo18

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

nombre = $("#nombre");
alert(nombre.existe_user());


Littl3

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.

pipook

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

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;
}

dengue8830

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!