php – ¿Por qué $_FILES no recibe ningún dato?

Tengo un formulario donde quiero subir fotos a la base de datos, obtengo los datos con formData y los paso a php, pero luego del lado del servidor me aparece $_FILES vacío.

<script language="JavaScript" type="text/javascript">

  $('.contBtn').on('click','#publicar',function(e){
    e.preventDefault()
    var formDatos = new FormData();
    var imagen = $('#formCrear').children('form').find('input(type="file")').get(0).files;
    formDatos.append('archivo',imagen(0));

     $.ajax({
       method: 'POST',
       url: url,
       data: datos,formDatos,
     }).done(function(response) {
       console.log(response);
     });

  });

</script>

De esta forma tomo los datos del input="file" con formData y los mando por AJAX a PHP junto con otros datos contenidos en un array llamado datos.

<?php
ini_set('display_errors','On');
error_reporting(E_ALL);
if(isset($_POST('datos')) && $_SERVER('REQUEST_METHOD') == 'POST') {

function validar_imagen() {
  if (($_FILES("archivo")("type") == "image/pjpeg") || ($_FILES("archivo")("type") == "image/jpeg")|| ($_FILES("archivo")("type") == "image/png")) {
    if (move_uploaded_file($_FILES("file")("tmp_name"), "images/".$_FILES('archivo')('name'))) {
        //more code here...
        echo "images/".$_FILES('archivo')('name');
    } else {
        echo 0;
    }
  } else {
      echo 0;
  }
}

echo validar_imagen();

}
?>

Este es la parte donde se envían los datos a PHP y trabajo con ellos. Solo coloqué la función que trabaja con la imagen.

Me arroja este error:

Notice: Undefined index: archivo

Hice un print_r($_FILES) para ver qué contenía y me aparece un array vacío. No tengo idea de por qué.

Nota 1: No he trabajado antes guardando imagenes o archivos ni utilizando formData, quizá me esté equivocando al mandar esos datos con AJAX por falta de conocimiento.

Nota 2: los datos del input="file" se toman correctamente desde JQuery, los mostré en consola para probar y no hay problema con eso.