1

これは頭​​を悩ませています。1)IDを取得する2)取得したIDで2番目の関数を呼び出す2つの関数があります。

ここで、それらを1つの関数に組み合わせる必要がありますが、GetSelectedID()が返される前に2番目の関数が呼び出されることは明らかです。

function FillControl() {
        var iSelectedID  = GetSelectedID();
        SetControlValuesWithSelectedID(iSelectedID);
}

function GetSelectedID() {
                $.ajax({
                    url: '123.ashx',
                    type: 'POST',
                    contentType: 'application/json',
                    success: function (data1) {
                            return data1;
                    }
                });
            }

最初の関数が呼び出されたときにのみ2番目の関数が呼び出されるように支援してください。

4

3 に答える 3

0

ajax成功コールバック内の2番目の関数を呼び出すだけです

GetSelectedID(function(iSelectedID){SetControlValuesWithSelectedID(iSelectedID);});
function GetSelectedID(callback) {
    $.ajax({ url: '123.ashx', 
        data: PassingObj, type: 'POST', contentType:  'application/json', 
        success: function (id) { 
            if(callback)
                callback(id);
        } 
    }); 
}

その関数から戻り値を取得したい場合は(id = GetSelectedID())、同期呼び出しを行う必要があります(async: false

http://api.jquery.com/jQuery.ajax/

于 2012-07-18T09:52:20.090 に答える
0

コールバック関数を組み込みます。GetSelectedID関数に。

コールバック関数は、最初の関数の実行が終了した後に2番目の関数を同期的に起動する必要がある場合に役立ちます。

function GetSelectedID(callback){
   // everything this function does
   var params = result;
   if(typeof(callback) == "function"){   // check if a callback was supplied
      callback(params);                  // run callback with your ID
   }
   return params; // also useful to return data in any case.
}

そしてあなたの通常のコードでは:

function FillControl() {
    GetSelectedID(function(params){
       SetControlValuesWithSelectedID(params);
    });
}  
于 2012-07-18T09:51:02.283 に答える
0

GetSelectedID()関数はAJAXリクエストを実行するため、非同期です。すぐに戻りますが、iSelectedIDしばらくしてから利用できるようになります。

にコールバック関数を渡し、GetSelectedID()に渡された成功コールバックからその関数を呼び出し、その呼び出し$.ajax()をその関数に再配置SetControlValuesWithSelectedIDできます。

function GetSelectedID(callback)
{
    $.ajax({
        url: '123.ashx',
        data: PassingObj,
        type: 'POST',
        contentType: 'application/json',
        success: function(data1) {
            callback(data1);
        }
    });
}

それで:

function FillControl()
{
    GetSelectedID(function(iSelectedID) {
        SetControlValuesWithSelectedID(iSelectedID);
    });
}
于 2012-07-18T09:52:50.270 に答える