2012-07-18 285 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

相关问题