0

私は ajax 呼び出しで 2 つの関数を持っています。function1 で返される function2 の変数を使用するにはどうすればよいですか。

function func1 (){
  $.ajax({
      url:"",
      dataType: 'json',
      success: function(data){
          var foo
      }
  });  
  //How can i use var foo in func2(foo)?
  //i try .done(func2(foo)); but it returns foo is not define
}

    function func2 (param){
       $.ajax({
         url:"",
         dataType: 'json',
         success: function(data){
       }
     });
     }
4

4 に答える 4

4
    function func1 (){
      var foo;
      $.ajax({
          url:"",
          dataType: 'json',
          async: false,
          success: function(data){
              foo = ...
          }
      });  
      func2(foo)
    }

asyncを false に設定するか、成功ハンドラで func2 を実行できます。

于 2012-09-22T18:08:47.687 に答える
1

ブラウザがfunc2を実行する前にfunc1の実行を待機できるように、変数をfooグローバルに、およびasyncに設定する必要があります。false

var foo;
function func1 (){
  $.ajax({
      url:"",
      dataType: 'json',
      async: false,
      success: function(data){
          foo = ...
      }
  });  
  //How can i use var foo in func2(foo)?
  //i try .done(func2(foo)); but it returns foo is not define
}

function func2 (param){
   $.ajax({
     url:"",
     dataType: 'json',
     success: function(data){
         alert(foo)
   }
 });
 }

Ozerichが言ったように、varを初期化せずにそれを行うこともできます。ただし、すべての変数を初期化することをお勧めします。

成功コールバック内で変数を再度初期化すると(var foo再度使用)、グローバル変数ではなくfooという名前の新しい変数を参照することになります。

Webを検索するJavaScript変数スコープについて詳しく知ることができます。https://stackoverflow.com/a/500459/407456

successところで、 func1のコールバック内でfunc2を実行することを検討する必要があります。

于 2012-09-22T18:17:48.517 に答える
0

func2()AJAX関数func1()を呼び出すだけです:success

function func1() {
    $.ajax({
        url: "",
        dataType: 'json',
        success: function(data) {
            var foo = data;
            func2(foo);
        }
    });
}

function func2(param) {
    $.ajax({
        url: "",
        dataType: 'json',
        success: function(data) {}
    });
}​

また

以下のようなコールバック関数を使用できます。

function func1(callback) {
    $.ajax({
        url: "",
        dataType: 'json',
        success: function(data) {
            var foo = data;

            // pass foo variable
            // as callback parameter
            callback(foo);
        }
    });
}

function func2(param) {

    // here call func1() with a
    // callback function argument

    func1(function(foo) {
      $.ajax({
        url: "",
        dataType: 'json',
        success: function(data) {}
      });
   });
}​

$.ajax()についての jQuery docによるとasync

jQuery 1.8 以降、jqXHR ($.Deferred)でasync: falseを使用することは推奨されなくなりました。完全/成功/エラーのコールバックを使用する必要があります。

于 2012-09-22T18:16:49.687 に答える
0

あなたが達成したいことが正確に何であるかわかりません。

最初の ajax 呼び出しの前に 2 番目の ajax 呼び出しを待ちたい場合async: falseは、ajax オプションで使用するか、コールバックを使用する必要があります。

function func1 (callback){
  $.ajax({
      url:"",
      dataType: 'json',
      success: function(data){
          var foo;
          if (typeof callback != 'undefined')
              callback(foo);
      }
  });  
}


function func2 (param){
   $.ajax({
     url:"",
     dataType: 'json',
     success: function(data){
   });
 }

func1(func2);

ただし、両方の ajax 呼び出しを並行させたいが、2 番目の関数がコード ブロックの前に最初の関数の結果を待機する必要がある場合は、両方の関数のコールバックを 3 番目の関数に定義して、すべてのデータがダウンロードされたかどうかを確認する必要があります。それでも、コードを実行するだけです。

于 2012-09-22T18:17:20.630 に答える