在一个Jquery函数中,只调用第二个函数,第一个函数返回结果

时间:2012-07-18 09:44:13

标签: jquery function wait

这是我的头脑,我有2个功能 1)获取ID 2)使用检索到的ID调用第二个函数。

现在我需要将它们组合在一个函数中,但显然第二个函数会得到 在GetSelectedID()返回之前调用

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

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

请在调用第一个函数后帮助调用第二个函数。

3 个答案:

答案 0 :(得分: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);
    });
}  

答案 1 :(得分: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);
        } 
    }); 
}

如果您想从该函数(id = GetSelectedID())获取返回值,则必须进行同步调用(async: false

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

答案 2 :(得分: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);
    });
}