WordPress Ajax Call inserting data but success response false

Look at your condition at the end:

if ( $result == false ) {
    wp_send_json_success( 'Link has been created' );
} else {
    wp_send_json_error();
}

wpdb::insert() returns false when there’s an error, so you’re only returning a success response when there’s an error. You need to swap the statement around.

if ( $result == false ) {
    wp_send_json_error();
} else {
    wp_send_json_success( 'Link has been created' );
}