jQuery promise with getJSON and callback

24,273

Solution 1

Instead of providing a callback function to .then(), you're passing in the output of console.log("second:" + new Date().getTime()) (which is why second gets printed immediately).

Make an anonymous function that wraps the code that you want to call (just like you did in .success()):

$.getJSON("/echo/json").success(function(data) {
  console.log("first: " + new Date().getTime());
}).then(function() {
  console.log("second:" + new Date().getTime())
});

Demo: http://jsfiddle.net/Blender/fJb7h/

Solution 2

Try with this:

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON( "example.json", function() {
  console.log( "success" );
})
  .done(function() {
    console.log( "second success" );
  })
  .fail(function() {
    console.log( "error" );
  })
  .always(function() {
    console.log( "complete" );
  });

// Perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function() {
  console.log( "second complete" );
});

Reference: https://api.jquery.com/jquery.getjson/

Share:
24,273
Guy Z
Author by

Guy Z

Updated on July 09, 2022

Comments

  • Guy Z
    Guy Z almost 2 years

    I have an ajax call with a callback. I want to call another method JUST after the callback has ended..I used the promise API from jQuery but as you can see below the second method is called before the first one has completed.

    Any ideas?

      my.data = function () {
         var loadFlights = function (callback) {
            //$.getJSON("/api/Acceptance/", function (data) {
            //    callback(data);
            //}); 
            $.getJSON("/api/Acceptance").success(function (data) {
               console.log("first: " + new Date().getTime());
               callback(data); 
            })
            .then(console.log("second:" + new Date().getTime()));
         };
    
         return { load: loadFlights }
      }();
    

    result to console:

    second:1357393615115 
    first: 1357393615246 
    
  • HN Singh
    HN Singh over 5 years
    Best answer because the miliseconds along the output are making it a lot clear
  • Jorhel Reyes
    Jorhel Reyes about 4 years
    this, but inner from a function and a return value?