Jquery callbacks with several ajax calls












0














I have several functions where I'm filling a dropdown based on a list from an ajax call :



function getMissions(defaultId) {
$.getJSON("Defaults/GetMissions", function (result) {
var dropDownToFill = $('#change-mission');
fillUpdateDropDown(dropDownToFill, result);
});
}
function getSectors(defaultId) {
$.getJSON("Defaults/GetSectors", function (result) {
var dropDownToFill = $('#change-sector');
fillUpdateDropDown(dropDownToFill, result);
});
}


Now, after dropdown have been filled, I want to select a specific item, but to get this item, I need an other ajax like :



function getDefaultDetails(defaultId) {
$.ajax({
type: "GET",
url: "/Defaults/GetDefault",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { defaultId: defaultId },
success: function (response) {
//code here to select the items from the response
},
});
}


and the main function would basically be :



function main(defaultId){
getMissions(defaultId);
getSectors(defaultId);
getDefaultDetails(defaultId);
}


The trouble is that the success callback of getDefaultDetails is reached before fillUpdateDropDown has been finished (dropdowns could have a lot of items).



I'm trying to understand the callbacks but in my case i cannot achieve my problem. I have tried something like :



 $.when(getMissions(defaultId), getSectors(defaultId)).done(getDefaultDetails(defaultId));


but without success.



How to perform that?



Thanks.










share|improve this question



























    0














    I have several functions where I'm filling a dropdown based on a list from an ajax call :



    function getMissions(defaultId) {
    $.getJSON("Defaults/GetMissions", function (result) {
    var dropDownToFill = $('#change-mission');
    fillUpdateDropDown(dropDownToFill, result);
    });
    }
    function getSectors(defaultId) {
    $.getJSON("Defaults/GetSectors", function (result) {
    var dropDownToFill = $('#change-sector');
    fillUpdateDropDown(dropDownToFill, result);
    });
    }


    Now, after dropdown have been filled, I want to select a specific item, but to get this item, I need an other ajax like :



    function getDefaultDetails(defaultId) {
    $.ajax({
    type: "GET",
    url: "/Defaults/GetDefault",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: { defaultId: defaultId },
    success: function (response) {
    //code here to select the items from the response
    },
    });
    }


    and the main function would basically be :



    function main(defaultId){
    getMissions(defaultId);
    getSectors(defaultId);
    getDefaultDetails(defaultId);
    }


    The trouble is that the success callback of getDefaultDetails is reached before fillUpdateDropDown has been finished (dropdowns could have a lot of items).



    I'm trying to understand the callbacks but in my case i cannot achieve my problem. I have tried something like :



     $.when(getMissions(defaultId), getSectors(defaultId)).done(getDefaultDetails(defaultId));


    but without success.



    How to perform that?



    Thanks.










    share|improve this question

























      0












      0








      0







      I have several functions where I'm filling a dropdown based on a list from an ajax call :



      function getMissions(defaultId) {
      $.getJSON("Defaults/GetMissions", function (result) {
      var dropDownToFill = $('#change-mission');
      fillUpdateDropDown(dropDownToFill, result);
      });
      }
      function getSectors(defaultId) {
      $.getJSON("Defaults/GetSectors", function (result) {
      var dropDownToFill = $('#change-sector');
      fillUpdateDropDown(dropDownToFill, result);
      });
      }


      Now, after dropdown have been filled, I want to select a specific item, but to get this item, I need an other ajax like :



      function getDefaultDetails(defaultId) {
      $.ajax({
      type: "GET",
      url: "/Defaults/GetDefault",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      data: { defaultId: defaultId },
      success: function (response) {
      //code here to select the items from the response
      },
      });
      }


      and the main function would basically be :



      function main(defaultId){
      getMissions(defaultId);
      getSectors(defaultId);
      getDefaultDetails(defaultId);
      }


      The trouble is that the success callback of getDefaultDetails is reached before fillUpdateDropDown has been finished (dropdowns could have a lot of items).



      I'm trying to understand the callbacks but in my case i cannot achieve my problem. I have tried something like :



       $.when(getMissions(defaultId), getSectors(defaultId)).done(getDefaultDetails(defaultId));


      but without success.



      How to perform that?



      Thanks.










      share|improve this question













      I have several functions where I'm filling a dropdown based on a list from an ajax call :



      function getMissions(defaultId) {
      $.getJSON("Defaults/GetMissions", function (result) {
      var dropDownToFill = $('#change-mission');
      fillUpdateDropDown(dropDownToFill, result);
      });
      }
      function getSectors(defaultId) {
      $.getJSON("Defaults/GetSectors", function (result) {
      var dropDownToFill = $('#change-sector');
      fillUpdateDropDown(dropDownToFill, result);
      });
      }


      Now, after dropdown have been filled, I want to select a specific item, but to get this item, I need an other ajax like :



      function getDefaultDetails(defaultId) {
      $.ajax({
      type: "GET",
      url: "/Defaults/GetDefault",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      data: { defaultId: defaultId },
      success: function (response) {
      //code here to select the items from the response
      },
      });
      }


      and the main function would basically be :



      function main(defaultId){
      getMissions(defaultId);
      getSectors(defaultId);
      getDefaultDetails(defaultId);
      }


      The trouble is that the success callback of getDefaultDetails is reached before fillUpdateDropDown has been finished (dropdowns could have a lot of items).



      I'm trying to understand the callbacks but in my case i cannot achieve my problem. I have tried something like :



       $.when(getMissions(defaultId), getSectors(defaultId)).done(getDefaultDetails(defaultId));


      but without success.



      How to perform that?



      Thanks.







      jquery ajax callback






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 at 18:21









      Manta

      18410




      18410
























          1 Answer
          1






          active

          oldest

          votes


















          1














          $.when() expects thenable objects (Promise, Deferred, Thenable) like the return value of $.getJSON().



          You also have to wrap the call for getDefaultDetails() in .done() in an anonymous function, otherwise you're executing the function and only use its return value (undefined) for .done()



          function getMissions(defaultId) {
          return $.getJSON("Defaults/GetMissions", function (result) {
          var dropDownToFill = $('#change-mission');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getSectors(defaultId) {
          return $.getJSON("Defaults/GetSectors", function (result) {
          var dropDownToFill = $('#change-sector');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getDefaultDetails() { /* ... */ }

          $.when(getMissions(defaultId), getSectors(defaultId))
          .done(function() { getDefaultDetails(defaultId) });





          share|improve this answer





















          • Thank you so much. return and the wraping did the trick.
            – Manta
            Nov 22 at 18:39











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436414%2fjquery-callbacks-with-several-ajax-calls%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          $.when() expects thenable objects (Promise, Deferred, Thenable) like the return value of $.getJSON().



          You also have to wrap the call for getDefaultDetails() in .done() in an anonymous function, otherwise you're executing the function and only use its return value (undefined) for .done()



          function getMissions(defaultId) {
          return $.getJSON("Defaults/GetMissions", function (result) {
          var dropDownToFill = $('#change-mission');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getSectors(defaultId) {
          return $.getJSON("Defaults/GetSectors", function (result) {
          var dropDownToFill = $('#change-sector');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getDefaultDetails() { /* ... */ }

          $.when(getMissions(defaultId), getSectors(defaultId))
          .done(function() { getDefaultDetails(defaultId) });





          share|improve this answer





















          • Thank you so much. return and the wraping did the trick.
            – Manta
            Nov 22 at 18:39
















          1














          $.when() expects thenable objects (Promise, Deferred, Thenable) like the return value of $.getJSON().



          You also have to wrap the call for getDefaultDetails() in .done() in an anonymous function, otherwise you're executing the function and only use its return value (undefined) for .done()



          function getMissions(defaultId) {
          return $.getJSON("Defaults/GetMissions", function (result) {
          var dropDownToFill = $('#change-mission');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getSectors(defaultId) {
          return $.getJSON("Defaults/GetSectors", function (result) {
          var dropDownToFill = $('#change-sector');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getDefaultDetails() { /* ... */ }

          $.when(getMissions(defaultId), getSectors(defaultId))
          .done(function() { getDefaultDetails(defaultId) });





          share|improve this answer





















          • Thank you so much. return and the wraping did the trick.
            – Manta
            Nov 22 at 18:39














          1












          1








          1






          $.when() expects thenable objects (Promise, Deferred, Thenable) like the return value of $.getJSON().



          You also have to wrap the call for getDefaultDetails() in .done() in an anonymous function, otherwise you're executing the function and only use its return value (undefined) for .done()



          function getMissions(defaultId) {
          return $.getJSON("Defaults/GetMissions", function (result) {
          var dropDownToFill = $('#change-mission');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getSectors(defaultId) {
          return $.getJSON("Defaults/GetSectors", function (result) {
          var dropDownToFill = $('#change-sector');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getDefaultDetails() { /* ... */ }

          $.when(getMissions(defaultId), getSectors(defaultId))
          .done(function() { getDefaultDetails(defaultId) });





          share|improve this answer












          $.when() expects thenable objects (Promise, Deferred, Thenable) like the return value of $.getJSON().



          You also have to wrap the call for getDefaultDetails() in .done() in an anonymous function, otherwise you're executing the function and only use its return value (undefined) for .done()



          function getMissions(defaultId) {
          return $.getJSON("Defaults/GetMissions", function (result) {
          var dropDownToFill = $('#change-mission');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getSectors(defaultId) {
          return $.getJSON("Defaults/GetSectors", function (result) {
          var dropDownToFill = $('#change-sector');
          fillUpdateDropDown(dropDownToFill, result);
          });
          }

          function getDefaultDetails() { /* ... */ }

          $.when(getMissions(defaultId), getSectors(defaultId))
          .done(function() { getDefaultDetails(defaultId) });






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 22 at 18:31









          Andreas

          16.2k32741




          16.2k32741












          • Thank you so much. return and the wraping did the trick.
            – Manta
            Nov 22 at 18:39


















          • Thank you so much. return and the wraping did the trick.
            – Manta
            Nov 22 at 18:39
















          Thank you so much. return and the wraping did the trick.
          – Manta
          Nov 22 at 18:39




          Thank you so much. return and the wraping did the trick.
          – Manta
          Nov 22 at 18:39


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436414%2fjquery-callbacks-with-several-ajax-calls%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Berounka

          Sphinx de Gizeh

          Different font size/position of beamer's navigation symbols template's content depending on regular/plain...