What could go wrong if I am not using die();
after the function that handles an Ajax request?
I have noticed that almost all the WordPress Ajax-based code is using it.
If you do not die
, execution will continue and might generate extra output which might break whatever information you are trying to send from the server to the browser. Strictly speaking, you might not need to die
, but there is very little point in taking the risk.
In more general terms, WordPress Ajax shows its age and the lack of experience working with Ajax when it was designed. You should use the WordPress JSON routes instead, as they can have a better URL structure, and the programming structure is more logical and modular.
admin-ajax.php
always adds output if request is not stopped. So, unless the caller of the AJAX ignores the output, the die
is basically required, even if the wrapper wp_die
should be preferred because a function containing die
is pretty-much impossible to test.
WordPress should not require this and it suggests poor coding practices.
When you make an Ajax request, the requested URL should generate a response with the data required (and also set the correct headers to say what type of data it is, e.g. JSON). Nothing else should be provided in the response except the required output.
I work with PHP and JavaScript all the time - although not a WordPress developer - and was amused by the title of this question. If that's what WordPress does, that's awful. As indicated in the accepted answer, it's likely to be a way to stop any further output being included in the response. But of course that "further output" should never be part of the response to begin with.
die
(or wrapper wp_die
) WP will add a "0"
that will break the JSON, preventing correct parsing from caller (js probably). So, yes, I agree that in a well developed application one should not be required to die; in WordPress, on the other hand...
die()
is not required, and never would be in a well-written PHP application. Analogies of CPU code are irrelevant and show a total lack of understanding. Maybe your definition of "awful" and mine are different. I don't use WP because it's littered with nonsense like this. I code (properly) in PHP all the time and am trying to help from a PHP perspective. You can either accept that WP has got this - and many other things - completely wrong. As this is a WP stack I guess the fans of it have a hard time with this.