Понадобилось сделать достаточно очевидную, казалось бы, вещь - страничку, на которой можно заполнить несколько полей формы, выбрать несколько файлов и при нажатии на кнопку чтобы всё это вместе отправлялось на сервер без перезагрузки страницы (через ajax).
Оказалось, что есть ряд ньюансов. По отдельности нет проблем, а чтобы всё вместе - начинаются сложности. В итоге всё заработало, так что предлагаю простой пример.
После успешной загрузки сервер возвращает содержимое массивов _POST и _FILES, которое выводится на ту же страницу.
Проверял в Windows версиях FF, Chrome, IE, Opera, а также в Android Chrome и старом Android Browser. Под IOS не проверял - нет под рукой.
Не работает в Safari 5.34/Win. Причина непонятна (симптомы - отправляет файлы нулевой длины).
Не будет работать в IE <9.
Код клиента (javascript):
Ajax file and form data upload test by Frog
Код сервера (php):
'_POST ' . nl2br(print_r($_POST,true)), "_FILES"=>'_FILES ' . nl2br(print_r($_FILES,true))) );
?>