Well, the short version is they serve different purposes, so the answer would be the “a combination of both for various situations” option. The basic rules are:
.ajaxComplete()– runs for every request that completes, use this when you want to do something with each request/result. Note that this doesn’t replace thesuccesshandler, since the parsed data is not one of the arguments (and it runs even when there’s an error) – you may want.ajaxSuccess()in some per-request situations instead..ajaxStop()– runs when every batch of requests completes, usually you’d use this in combination with.ajaxStart()for things like showing/hiding a “Loading…” indicator of some sort – or to do something else once a batch of AJAX requests finishes, like a master last step.
If you’re using this to parse your data, there’s probably a better way, in this case $.ajaxSetup(), where you can specify a success handler that gets the already-parsed data (e.g. JSON responses will be objects), like this:
$.ajaxSetup({
success: function(data) {
//do something with data, for JSON it's already an object, etc.
}
});