Отправка формы с помощью 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 не поддерживает, а дописывать их поддержку лень. Гугл обиделся и ничего подходящего не выдал. Помогите советом, братья-кодеры :) |
Цитата:
|
Цитата:
Цитата:
|
В общем, решил проблему полной сменой алгоритма загрузки:
1. выбираем файлы и заливаем во временную папку с помощью любого предназначенного для этого плагина, а в сессию(в серверном скрипте, реализующем загрузку) кладем название файла(или файлов) 2. отправляем текстовые данные из формы на указанный в форме адрес и в принимающем скрипте распарсиваем нужную сессию вместо массива $_FILES. 3. ??? 4. PROFIT Кстати, почти такой же способ используется вконтактике, оттуда и позаимствовал :p |
Часовой пояс GMT +3, время: 19:26. |