Updating User Profile with AJAX not working

This whole thing works as far as I can tell. In the future it may be easier to debug things by using PHP error_log() to write to the debug.log at certain points, like inside your ajax callback.

If you’re only wanting to run this ajax for logged in users, you can drop the wp_ajax_nopriv hook and the is_user_logged_in() conditional and just stick with wp_ajax_* hook. wp_ajax_nopriv is “No Privileges” which means it will run for non-logged in users. The normal wp_ajax function will only run for logged in users.

The main issue is that your keys do not match the WordPress usermeta keys. You’re grabbing the inputs ID which is first-name but WordPress expects first_name as the metakey. I bet if you checked your databases uusermeta table, you’d see a couple instances of first-name as a metakey.