LOGO AJAX учебник
AJAX iframe загрузка файлов
Ajax передача файлов через iframe.

Если на странице будет находится iframe на который будет отправляться форма, то в него можно передать файл.

Осталось решить эту проблему: создать невидимый iframe, отправить на него форму, и по завершению вызвать функцию.

Чтобы создать динамичекий iframe напишем функцию
function createIFrame() {
  var id = 'f' + Math.floor(Math.random() * 99999);
  var div = document.createElement('div');
  div.innerHTML = "<iframe style=\"display:none\" src=\"about:blank\" id=\""+id+"\" name=\""+id+"\" onload=\"sendComplete('"+id+"')\"></iframe>";
  document.body.appendChild(div);
  return document.getElementById(id);
}
Функция создает каждый раз разный iframe
После перехода по URL внутри IFRAME срабатывает событие
ONLOAD = sendComplete(id)

Опишем функцию sendComplete()
function sendComplete(id) {
  var iframe=document.getElementById(id);
  if (iframe.onSendComplete &&
  typeof(iframe.onSendComplete) == 'function')  iframe.onSendComplete();
}
Функция вызывает метод iframe.onSendComplete() который опишем ниже

А пока напишем функцию которая будет читать содержимое IFRAME и выводить в виде текста результат
function getIFrameXML(iframe) {
  var doc=iframe.contentDocument;
  if (!doc && iframe.contentWindow) doc=iframe.contentWindow.document;
  if (!doc) doc=window.frames[iframe.id].document;
  if (!doc) return null;
  if (doc.location=="about:blank") return null;
  if (doc.XMLDocument) doc=doc.XMLDocument;
  return doc;
}
Ну вот теперь все готово можно описать последнюю функцию
ajax_iframe(form,url,callback)
form - ID Формы или Объект формы
url - адрес куда оправляется запрос
callback функция с 1 параметром, содержащим результат запроса, вызывается после завершения запроса.
/* ajax start */
function ajax_iframe(form, url, callback) {
	if (!document.createElement) return;
	// если передан ID то присваиваем form объект формы
	if (typeof(form) == "string") form = document.getElementById(form);
	// создаем динамический IFRAME
	var frame = createIFrame();
	// запоминаем значение URL формы
	var act = form.getAttribute('action');
	// Описываем метод onSendComplete, который будет вызван фреймом через onload = sendComplete()
	frame.onSendComplete = function() {
		// восстнавливаем URL формы из act
		form.setAttribute('action', act);
		// уничтожаем Target формы
		form.removeAttribute('target');
		// читаем содержииое IFRAME
		var doc = getIFrameXML(frame);
		// вызов callback
		callback(doc.body.innerHTML);
	};
	// Устанавливаем для формы Target на только что созданный фрейм
	form.setAttribute('target', frame.id);
	// Устанавливаем адрес отправки формы на url
	form.setAttribute('action', url);
	// Оправляем форму
	form.submit();
}
Теперь соберем все воедино и создадим модуль
ajax_iframe.js
function sendComplete(id) {
	var iframe = document.getElementById(id);
	if (iframe.onSendComplete &&
		typeof(iframe.onSendComplete) == 'function') iframe.onSendComplete();
}

function createIFrame() {
	var id = 'f' + Math.floor(Math.random() * 99999);
	var div = document.createElement('div');
	div.innerHTML = "<iframe style=\"display:none\" src=\"about:blank\" id=\"" + id + "\" name=\"" + id + "\" onload=\"sendComplete('" + id + "')\"></iframe>";
	document.body.appendChild(div);
	return document.getElementById(id);
}

function getIFrameXML(iframe) {
		var doc = iframe.contentDocument;
		if (!doc && iframe.contentWindow) doc = iframe.contentWindow.document;
		if (!doc) doc = window.frames[iframe.id].document;
		if (!doc) return null;
		if (doc.location == "about:blank") return null;
		if (doc.XMLDocument) doc = doc.XMLDocument;
		return doc;
	}
	/* ajax start */
function ajax_iframe(form, url, callback) {
	if (!document.createElement) return;
	if (typeof(form) == "string") form = document.getElementById(form);
	var frame = createIFrame();
	var act = form.getAttribute('action');
	frame.onSendComplete = function() {
		form.setAttribute('action', act);
		form.removeAttribute('target');
		var doc = getIFrameXML(frame);
		callback(doc.body.innerHTML);
	};
	form.setAttribute('target', frame.id);
	form.setAttribute('action', url);
	form.submit();
}
Пример
form.html
<html>

<head>
	<script type="text/javascript" src="ajax_iframe.js"></script>
	<script>
		function post_form() {
			document.getElementById('pp').style.display = 'block';
			ajax_iframe('my_form', 'get_file.php', function(ret) {
				document.getElementById('pp').style.display = 'none';
				alert(ret);
			});
		}
	</script>
</head>

<body>
	<form id="my_form" method="post" enctype="multipart/form-data" onsubmit="post_form()">
		<input type="file" name="file" />
		<input type="submit" value="отправить">
		<p id="pp" style="display: none;">идет отправка...</p>
	</form>
</body>

</html>
get_file.php
<?php
header("Content-type: text/html");
if ($_FILES['file']['error']==0 && $_FILES['file']['size'] >0) {
  if(move_uploaded_file($_FILES["file"]["tmp_name"], './'.$_FILES["file"]["name"])){
	echo sprintf('Файл успешно загружен 
		Характеристики файла:	
		Имя файла: %s
		Размер файла: %s
		Каталог для загрузки: %s',
		$_FILES["file"]["name"],
		$_FILES["file"]["size"],
		$_FILES["file"]["tmp_name"]
	);
  } else {
    echo("Ошибка загрузки файла");
  }
}
else {
  echo("Файл не выбран");
}
Результат

 Скачать ajax_iframe.zip