Devuelve una variable local o GET resultados

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

});

preguntado el 22 de mayo de 12 a las 20:05

$.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 tu test 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. -

¿Podría hacerse de tal manera que la llamada ajax nunca se realice si x es verdadero? -

Sí, simplemente active la devolución de llamada inmediatamente en lugar de usarla en $.get. -

¿Puede dar más detalles sobre cómo disparar la devolución de llamada? Gracias -

1 Respuestas

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 or haz tu propia pregunta.