I’m constantly searching around for the cleanest and most “WordPress way” to do things vs. re-inventing the wheel. One function that helps write cleaner AJAX call handlers is status_header(), to inform the caller when things go wrong:
add_action( 'wp_ajax_myajaxaction', 'my_ajax_handler' );
function my_ajax_handler() {
if ( ! empty($_POST) and check_ajax_referer( 'mynonce', 'nonce' ) ) {
if ( things_go_wrong ) {
status_header( 500 );
echo "some informative message or code";
}
// ...
}
}
and in the javascript using success and failure functions rather than deconstructing response text:
var nonce = jQuery("input#nonce").val();
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: {
name: encodeURIComponent(tabName),
id: tabId,
mynonce: nonce,
action: 'myajaxaction'
},
success: function(msg) {
// Handle a successful call
},
error: function(v,msg) {
// Handle the error, with the text in msg
}
});
You could also output the headers manually, but this gives a nice clean way to do it.