2017-12-15 31 views
1

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

は私が右のトラックにAMまたはより良い方法はありますか?

+2

あなたはすでにそれを持っています - 'call.done()'はAjax呼び出しの完了後に実行されるコールバックメソッドです。 – Archer

+0

私は知っていますが、私はその呼び出しを2回使います。呼び出し後に起こるロジックを別の場所に置いてみたいと思います。 – AllramEst

+0

いつでも関数を定義して、 'call.done(updateBokningsArray)'のようなことをすることができます – sabithpocker

答えて

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

'doneCallback();でコードが壊れますErrormessage:' Uncaught TypeError:doneCallbackは関数ではありません ' – AllramEst

+0

あなたはパラメータを関数呼び出しに渡して、実際に関数を参照していますか? – Archer

+0

私の悪いです。私は結果と戻ってくる – AllramEst

0

...このようにそれを呼び出しますテスト済み)

function ajaxCallToBokningar() { 
    var url = `${_spPageContextInfo.webAbsoluteUrl}/_api/web/lists/getbytitle('Bokningar')/items`; 
    var options = { 
    url: url, 
    type: "GET", 
    dataType: "json", 
    headers: { 
     Accept: "application/json;odata=verbose" 
    } 
    }; 

    return jQuery.ajax(options); 
} 


function updateBoknigarArray(data) { 
    window.globalBokningsArray = data.d.results; 
} 

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

ajaxCallToBoknigar() 
    .done(updateBoknigarArray) 
    .fail(showError) 
関連する問題