Не удивительно, что не загружается, так как никакой отправки файла клиент и не производит.

И сервер предупреждает о несоответствии.
Код серверный это абракадабра полная. Загрузка файлов на сервере, если говорить о полном процессе, начинается с проверки не пуст ли массив FILES, если нет, проверяются ошибки загрузки его ключа "error", если есть ошибки то действия определенные сценарием - или прекращение загрузки и возврат ошибок клиенту, либо перемещение в каталог загруженных, и сообщить клиенту о тех что не загружены, в случае загрузки нескольких файлов.
Если нет ошибок и есть что помещать в каталог, этому каталогу устанавливаются права 0777 (после загрузки вновь по умолчанию - 0755) и только затем в цикле если файлов несколько, или сразу если файл один функцией move_uploaded_file перемещают загруженный файл в каталог. Только нельзя брать непосредственно имя файла, что содержится в ключе "name", нужно из него брать только имя файла basename(), так как этот ключ может содержать и путь, который можно подставить. В каталоге, в который производится загрузка, должно быть запрещено выполнение любых скриптов и исполняемых файлов.
На клиенте
"// Сервер вернул код 200 (что хорошо)" еще не означает, что все хорошо, это всего лишь ответ сервера что "созвонились". О загрузке на клиенте:
https://learn.javascript.ru/xhr-forms
http://habrahabr.ru/post/120917/