0

我想返回 x || $.get。

或者换句话说,如果 x 为真,则返回 x,否则执行 GET 调用并返回服务器提供的值。

下面列出了我的尝试(理想情况下,它将遵循 return x || y 格式,可能带有匿名函数?而不是 if/then)。

问题是我从 $.get 函数返回的结果似乎不是我所期望的。

希望能解释发生了什么。

谢谢

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

});
4

1 回答 1

2

如果您使用的是 jQuery 1.5 或更高版本,那么DeferredPromise是这类事情的好帮手。每当您调用 AJAX 调用时,您得到的都是 Promise 对象,您可以通过 .done()、.fail() 和 .then() 将函数附加到这些对象。

然而!正如对延迟/承诺和所有这些东西( http://www.erichynds.com/jquery/using-deferreds-in-jquery/ )的出色介绍所指出的,您还可以使用 $.wait() 的能力处理一个不承诺自动进行缓存的值。所以这样的代码:

$.when(getToken()).done(
  function (token) {
    // do something with the token, which may or may not have been 
    // retrieved from the remote service
  }
);

可以处理获取缓存值或没有问题的承诺:

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 ... ");
  }
};
于 2012-05-22T20:50:38.987 回答