1

这让我很头疼,我有 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;
                    }
                });
            }

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

4

3 回答 3

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);
    });
}  
于 2012-07-18T09:51:02.283 回答
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/

于 2012-07-18T09:52:20.090 回答
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 回答