Devuelve una variable local o GET resultados
Frecuentes
Visto 88 veces
0
Me gustaría devolver x || $.obtener.
O, en otras palabras, si x es verdadero, devuelva x, de lo contrario, realice una llamada GET y devuelva el valor proporcionado por el servidor.
Mi intento se enumera a continuación (idealmente, seguiría el formato de retorno x || y tal vez con una función anónima? En lugar de si/entonces).
El problema es que mi retorno de mi función $.get parece no ser lo que esperaba.
Agradecería una explicación de lo que está pasando.
Muchas Gracias
$(function(){
function test(x,y) {
if(x==true) {return true;}
else{
//test.php is echo($_GET['y']==123);
$.get('ajax.php',{'y':y},function (status) {return status;});
}
}
alert(test(false,123));
});
1 Respuestas
2
Si está utilizando jQuery 1.5 o posterior, Diferido y Promesa eres tu amigo para este tipo de cosas. Cada vez que llama a AJAX, lo que obtiene son objetos Promise a los que puede adjuntar funciones a través de .done(), .fail() y .then().
¡Sin embargo! Como se señala en esta excelente introducción a diferido/promesa y todas estas cosas (http://www.erichynds.com/jquery/using-deferreds-in-jquery/), también puede usar la capacidad de $.wait() para manejar un valor que no es una promesa de realizar el almacenamiento en caché automáticamente. Así que código como este:
$.when(getToken()).done(
function (token) {
// do something with the token, which may or may not have been
// retrieved from the remote service
}
);
Puede manejar recuperar un valor almacenado en caché o una promesa sin problema:
function getToken() {
// Return either the cached value or a jQuery Promise. If $.when() gets the
// cached value it will immediately realize that you didn't give it a
// promise and it will instead create a jQuery Deferred to return and
// .resolve() it using the value it did get. Thus, either way what
// comes out of the function is something .when() can deal with and call a function.
if (this.cache["token"]) {
return this.cache["token"];
} else {
return $.get(" ... some url ... ");
}
};
contestado el 22 de mayo de 12 a las 21:05
No lo he mirado en detalle, pero lo haré. Yendo en la fe que es la respuesta correcta. Gracias - user1032531
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript jquery or haz tu propia pregunta.
$.get
, como todas las llamadas AJAX por defecto, es asincrónico - vuelve a la persona que llama inmediatamente, sin bloquear y esperando el resultado. Necesitas refactorizar tutest
función para recibir una devolución de llamada y llamar a esa devolución de llamada una vez que reciba el valor a través de ajax. - DCoder¿Podría hacerse de tal manera que la llamada ajax nunca se realice si x es verdadero? - user1032531
Sí, simplemente active la devolución de llamada inmediatamente en lugar de usarla en
$.get
. - apsillers¿Puede dar más detalles sobre cómo disparar la devolución de llamada? Gracias - user1032531