La comprobación de formulario de jquery devuelve verdadero, pero debe devolver falso

Estoy ejecutando esta verificación de formulario cuando se envía el formulario:

if((formData[4].value == 1 || formData[4].value == 2) && !formData[2].value) { 
    alert('Please fill out the key field');
    return false;
} else {
    $.ajax({
        url: "/ajax/key_check.php",
        cache: false,
        data: "key=" + formData[4].value,
        dataType: "html",
        success: function(data) {
            if(data == 1) {
                alert('Key already exists');
                return false;
            }
        }
    });

    return true;
}

El script funciona, alerta que la clave ya existe si los datos son == 1, sin embargo, el formulario aún se envía. Pensé devolviendo false si data == 1 detendría el procesamiento del formulario, sin embargo, continúa y agrega la clave de todos modos y la clave emergente ya existe el mensaje. ¿Cómo puedo evitar que el formulario se envíe si data == 1? Intenté incluso hacer esto:

if(data == 1) {
    alert('Key already exists');
    return false;
} else {
    return true;
}

Luego se eliminó el retorno verdadero en la parte inferior del script, pero ocurre el mismo problema. Aparece una ventana emergente pero el formulario aún se procesa.

Respuestas a la pregunta(2)

Su respuesta a la pregunta