wp_verify_nonce doesn’t return true on server when it matches the nonce

The second parameter for wp_verify_nonce() is the action. That part is not in your question, but I guess it should be called like:

if ( !wp_verify_nonce($_POST['nonce'], $_POST['action']) ){