0

x || を返したい $.get.

つまり、x が true の場合は x を返し、そうでない場合は GET 呼び出しを実行して、サーバーから提供された値を返します。

私の試みを以下に示します(理想的には、 if/then の代わりに無名関数を使用して return x || y 形式に従います)。

問題は、 $.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 呼び出しを呼び出すたびに返されるのは、.done()、.fail()、および .then() を介して関数をアタッチできる Promise オブジェクトです。

でも!deferred/promise およびこれらすべての優れたイントロ ( 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
  }
);

キャッシュされた値または promise の取得を問題なく処理できます。

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 に答える