The tricky thing with code paths like this is being confident that you have all the cases to re-enable the button.  You have the error check case, the AJAX success case, and the AJAX fail case covered.  The only other way I could see getting out of this function is via an exception -- is that a useful catch to watch out for?  You could in theory put this entire thing in a try/catch block and re-enable there too.