Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.10.2011, 01:38
Аватар для pav
pav pav вне форума
Новичок на форуме
Отправить личное сообщение для pav Посмотреть профиль Найти все сообщения от pav
 
Регистрация: 02.08.2011
Сообщений: 4

Отправка формы с помощью XMLHttpRequest2 и FormData
Нужно было реализовать сабж. Затык в том, что $.ajax не поддерживает отправку данных, которые генерирует FormData, и соотв. код
options.data = new FormData($('#formId').get(0));
$.ajax(options);

возвращает ошибку.

Время поджимало, и я написал костыль:
$.aajax = function(options){
	var status;
	var xhr = $.ajaxSettings.xhr();
	xhr.timeout = cfg.timeout;
	(options.beforeSend) ? options.beforeSend() : $.ajaxSettings.beforeSend();
	xhr.open('POST',options.url);
	xhr.setRequestHeader('X-Requested-With','XMLHttpRequest');
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4){
			if(xhr.status == 200){
				(options.success) ? options.success(xhr.responseText) : $.ajaxSettings.success(xhr,xhr.responseText);
				status = 'success';
			}else{
				status = 'error';
			}
			clearTimeout(timeout);
			(options.complete) ? options.complete(xhr,status) : $.ajaxSettings.complete(xhr,status);
		}
	};
	xhr.send(options.data);
	var timeout = setTimeout(function(){xhr.abort(); status='timeout'; $.ajaxSettings.complete(xhr,status)},cfg.timeout);
};

В событии отправки формы проверяется проверка наличия у юзера FormData и, если есть, отправка идет с помощью представленной выше функции. Собственно, вопрос: есть ли готовый плагин для поддержки отправки таких данных с помощью стандартного $.ajax? Не загрузку файлов по отдельности, а именно отправки всей формы. jquery.form делает это костылем со скрытым iframe, который по ряду причин нежелателен. Мой плагин, написанный на скорую руку, многих плюшек jquery не поддерживает, а дописывать их поддержку лень. Гугл обиделся и ничего подходящего не выдал. Помогите советом, братья-кодеры
Ответить с цитированием
  #2 (permalink)  
Старый 05.10.2011, 03:23
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Сообщение от pav
$('#formId').get(0)
Делаете выборку по id и ищите в найденном 1-эй элемент?
Ответить с цитированием
  #3 (permalink)  
Старый 05.10.2011, 07:45
Аватар для pav
pav pav вне форума
Новичок на форуме
Отправить личное сообщение для pav Посмотреть профиль Найти все сообщения от pav
 
Регистрация: 02.08.2011
Сообщений: 4

Сообщение от zebra Посмотреть сообщение
Делаете выборку по id и ищите в найденном 1-эй элемент?
Нет же, читайте документацию:
Цитата:
get( )

Обзор
Опции
Примеры
Обсуждение

Обращается к массиву объектов DOM.

Служит как обратно-совместимый способ доступа ко всем совпавшим элементам (помимо самого объекта jQuery, который, по сути, есть массив элементов). Данным методом целесообразно пользоваться, когда Вам необходимо работать над самими элементами DOM вместо использования встроенных функций jQuery.
Т.е. $('#id').get(0) == $('#id')[0], да и с моим костылем все отправляется прекрасно, я просто ищу более функциональный метод. Кстати, в опере(даже последней) не работает FormData, а jquery.form некорректно работает с формами, в которых несколько файлов. Придется, наверное, сначала выдирать из формы файлы, отправлять их(например, plupload) и в серверном скрипте класть в сессию имена загруженных в /tmp файлов, а после получения ответа уже отправлять форму с только текстовыми данными.
Ответить с цитированием
  #4 (permalink)  
Старый 05.10.2011, 10:16
Аватар для pav
pav pav вне форума
Новичок на форуме
Отправить личное сообщение для pav Посмотреть профиль Найти все сообщения от pav
 
Регистрация: 02.08.2011
Сообщений: 4

В общем, решил проблему полной сменой алгоритма загрузки:
1. выбираем файлы и заливаем во временную папку с помощью любого предназначенного для этого плагина, а в сессию(в серверном скрипте, реализующем загрузку) кладем название файла(или файлов)
2. отправляем текстовые данные из формы на указанный в форме адрес и в принимающем скрипте распарсиваем нужную сессию вместо массива $_FILES.
3. ???
4. PROFIT

Кстати, почти такой же способ используется вконтактике, оттуда и позаимствовал
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка формы по нажатию на ENTER Vuzy Общие вопросы Javascript 9 24.01.2013 23:36
Отправка из формы в форму.. gJam Элементы интерфейса 5 21.07.2011 11:42
Отправка формы с элементами input Alex2011 jQuery 1 11.01.2011 14:17
нежелательная отправка формы в jQuery UI autocomplete combobox konst56 jQuery 0 18.12.2010 11:28
Отправка текущих переменных формы в ссылке user1980 Общие вопросы Javascript 2 26.10.2009 17:28