Why does JQuery.getJSON() have a success and a done function?
Asked Answered
E

2

14

The JQuery documentation for getJSON shows an example of:

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

What's the difference between the success function (passed as the 2nd parameter) the the done() function? They seem to be the same thing.

Endive answered 14/4, 2014 at 16:57 Comment(4)
api.jquery.com/jQuery.ajaxTease
This question appears to be off-topic because it is about why jQuery is designed as specific way.Bookbindery
I don't think it's off topic. The OP would like to know if there are differences between both ways.Firecracker
@JuanMendes thank you, yes. The fundamental question was not why there are both, but is there any difference between being called by one or the other.Endive
T
13

Initially, jQuery asynchronous functions weren't returning promises, you had to use the callback.

Then they added the deferred (promise) system but kept the callbacks for compatibility (and because not everybody like deferred).

From the Deferred object documentation :

In JavaScript it is common to invoke functions that optionally accept callbacks that are called within that function. For example, in versions prior to jQuery 1.5, asynchronous processes such as jQuery.ajax() accept callbacks to be invoked some time in the near-future upon success, error, and completion of the ajax request.

jQuery.Deferred() introduces several enhancements to the way callbacks are managed and invoked. In particular, jQuery.Deferred() provides flexible ways to provide multiple callbacks, and these callbacks can be invoked regardless of whether the original callback dispatch has already occurred. jQuery Deferred is based on the CommonJS Promises/A design.

Tannin answered 14/4, 2014 at 17:0 Comment(0)
F
4

They are the same thing. The done function is meant to work like Promise That way you can install handlers from the result of the ajax call. It even works if you call done after the asynchronous call finished (by storing the return value)

Firecracker answered 14/4, 2014 at 17:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.