具有ajax调用的函数执行后的函数已完成

时间:2017-12-15 09:06:37

标签: javascript jquery ajax

我想知道当ajax调用的函数完成时执行函数的最佳方法。

我的代码:

   jQuery.when(AjaxCallToBokningar()).done(function () {

            console.log("AjaxCallComplete");
        });


    function AjaxCallToBokningar() {
    var url = `${_spPageContextInfo.webAbsoluteUrl}/_api/web/lists/getbytitle('Bokningar')/items

    var call = jQuery.ajax({
        url: url,
        type: "GET",
        dataType: "json",
        headers: {
            Accept: "application/json;odata=verbose"
        }
    });

    //Done
    call.done(function (data, textStatus, jqXHR) {
        //Filling globalArray
        window.globalBokningsArray = data.d.results;
    });

    //Fail
    call.fail(function (jqXHR, textStatus, errorThrown) {
        console.log('Loading Bokningar content faild: ' + textStatus + jqXHR.responseText);
    });
}

我是在正确的轨道上还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

如果您希望能够进行Ajax调用,然后在函数完成时调用它,您可以使用函数引用作为参数,并按照这样做...

function AjaxCallToBokningar(doneCallback) {
    var url = `${_spPageContextInfo.webAbsoluteUrl}/_api/web/lists/getbytitle('Bokningar')/items

    var call = jQuery.ajax({
        url: url,
        type: "GET",
        dataType: "json",
        headers: {
            Accept: "application/json;odata=verbose"
        }
    });

    //Done
    call.done(function (data, textStatus, jqXHR) {
        //Filling globalArray
        window.globalBokningsArray = data.d.results;
        doneCallback();
    });

    //Fail
    call.fail(function (jqXHR, textStatus, errorThrown) {
        console.log('Loading Bokningar content faild: ' + textStatus + jqXHR.responseText);
    });
}

然后你就可以这样称呼它......

function ajaxCallComplete1() {
    // this is executed after the 1st call is done - do something here 
}

function ajaxCallComplete2() {
    // this is executed after the 2nd call is done - do something here 
}

AjaxCallToBokningar(ajaxCallComplete1);
AjaxCallToBokningar(ajaxCallComplete2);

...或

AjaxCallToBokningar(function() {
    // this is executed after the call is done - do something here 
});

答案 1 :(得分:0)

你也可以尝试这样的事情:(未经测试)

serv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           txtServ.setVisibility(View.VISIBLE);
        }
    });