返回局部变量或GET结果

时间:2012-05-22 19:44:07

标签: javascript jquery

我想返回x ||和$ .get。

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

我的尝试列在下面(理想情况下,它会跟随返回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));

});

1 个答案:

答案 0 :(得分: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 ... ");
  }
};