WP ajax is a bit strange.  You enqueue the script to get it to show up on the page.  You also LOCALIZE your script in order to stick variables into the page the script will need, variables such as nonces, ajax addresses, or even other weird things you may find useful.

Register and localize the script like this:

        wp_enqueue_script( 'name_of_function', get_stylesheet_directory_uri() . '/js/my_special_script.js', array( 'jquery' ), '1.0', true );
    	wp_localize_script( 'name_of_function',
    					   'name_the_script_will_see',
    					   array(
    						   'ajax_url' => admin_url('admin-ajax.php'),
    						   'ajax_nonce' => wp_create_nonce('your_nonce'),
    					   ));

And then you have to add the ajax action TWICE, once for public and again for admin pages.

    add_action('wp_ajax_this_is_the_ajax_name', 'function_name_in_php' );
    add_action('wp_ajax_nopriv_this_is_the_ajax_name', 'function_name_in_php' );

Then in your script you pick up the values something like this:

    var data = {
                    'action': 'this_is_the_ajax_name',
                    'post_nonce': name_the_script_will_see.ajax_nonce,
                    'other_value_needed': value_generated_by_script,
                };
    $.post( name_the_script_will_see.ajax_url, data, function( response_data ) { 
    
                if ( response_data.success ) {
    				alert ("Success");
                } else {
    				alert ("Error");
                }

Your php script will get the data as post data:

    function function_name_in_php(){
         $nonce = $_POST['post_nonce'];
         $other_data = $_POST['other_value_needed'];
         if ( ! wp_verify_nonce( $nonce, 'your_nonce' ) ) {
        wp_send_json_error(array(
    		'message'=>'Security Token Failure',
    	)); // sends json_encoded success=false
    }

I will use one nonce in many different scripts.  All I'm really doing is making sure my requester is actually coming from my site.  There's no point in generating 17 different nonces for that.  Often I stick the nonce into a submission button as a data-attribute, then pull the nonce from that rather than from the wordpress localization scheme.

    var postData = {};
     var nonce = $('#register_button').attr('data-nonce');
     postData.nonce = nonce;
     postData.action = 'this_is_the_ajax_name';
    $.post( name_the_script_will_see.ajax_url, postData, function( response_data ) { 
    
            if ( response_data.success ) {
    			alert ("success");
            } else {
    			alert ("Error");
            }
Hope this helps!