2012-07-18 211 views
1

這打破了我的腦海,我有兩個函數 1)得到一個ID 2)調用第二個函數與檢索的ID。在一個jquery函數中,只調用第二個函數一個函數第一個函數返回結果

現在我需要他們在一個功能結合起來,但很明顯,第二個函數被GetSelectedID之前調用 ()返回

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

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

請幫助獲得第二個函數被調用一次第一函數被稱爲。

+0

韓元那*已經*爲你做了嗎? – 2012-07-18 09:45:06

+0

GetSelectedID()是異步的嗎?你能發佈這個函數的實現嗎? – 2012-07-18 09:46:43

+0

不幸的是,第二個函數在第一個函數返回selectedID之前被調用 – 2012-07-18 09:46:59

回答

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); 
    }); 
} 
0

合併回調函數。到你的GetSelectedID函數。

當您的第一個函數完成運行後需要同步觸發第二個函數時,回調函數很有用。

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); 
    }); 
} 
0

只需調用AJAX成功回調

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); 
     } 
    }); 
} 

內的第2個功能(id = GetSelectedID() )你必須進行同步呼叫(async: false

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

+0

問題是GetSelectedID()是一個泛型函數,需要從很多函數中調用,並且不一定需要後來的任何東西。它被用作參數的一部分,例如var PassingObj = new Object(); PassingObj.ID = GetSelectedID(); – 2012-07-18 10:03:29

+0

我更新了我的答案。 – Thomas 2012-07-18 10:46:58

相關問題