Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скрипт для одновременной загрузки файла и описания, на Jquery 
:(
    Опции темы
AlexanderI
Дата 28.4.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.7.2004

Репутация: нет
Всего: 3



Здравствуйте.
Подскажите, есть ли какие-то готовые библиотеки для одновременной загрузки файла и его описания через Ajax без перезагрузки страницы ?
--------------------
Магазин детских игрушек  | Авто ВАЗ
PM MAIL   Вверх
IDVsbruck
Дата 28.4.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



Если речь идет об отправке файла с описанием на сервер, то можно использовать следующий (исходники взяты не помню откуда и доделаны мною):

"Библиотечный" код:
Код

jQuery.extend({
    createUploadIframe: function(id, uri) {
        var frameId = 'jUploadFrame' + id;
        if (window.ActiveXObject) {
            var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
            if (typeof uri == 'boolean') io.src = 'javascript:false';
            else if (typeof uri == 'string') io.src = uri;
        } else {
            var io = document.createElement('iframe');
            io.id = frameId;
            io.name = frameId;
        }
        io.style.position = 'absolute';
        io.style.top = '-1000px';
        io.style.left = '-1000px';
        document.body.appendChild(io);
        return io;            
    },
    createUploadForm: function(id, fileElementId, data) {
        var formId = 'jUploadForm' + id;
        var fileId = 'jUploadFile' + id;
        var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');    
        var oldElement = $('#' + fileElementId);
        var newElement = $(oldElement).clone();
        $(oldElement).attr('id', fileId);
        $(oldElement).before(newElement);
        $(oldElement).appendTo(form);
        $(form).css('position', 'absolute');
        $(form).css('top', '-1200px');
        $(form).css('left', '-1200px');
        $(form).appendTo('body');
        return form;
    },
    ajaxFileUpload: function(s) {
        s = jQuery.extend({}, jQuery.ajaxSettings, s);
        var id = new Date().getTime();
        var form = jQuery.createUploadForm(id, s.fileElementId, s.data);
        var io = jQuery.createUploadIframe(id, s.secureuri);
        var frameId = 'jUploadFrame' + id;
        var formId = 'jUploadForm' + id;        
        if (s.global && !jQuery.active++) jQuery.event.trigger("ajaxStart");
        var requestDone = false;
        var xml = {};
        if (s.global) jQuery.event.trigger("ajaxSend", [xml, s]);
        var uploadCallback = function(isTimeout){            
            var io = document.getElementById(frameId);
            try {                
                if (io.contentWindow){
                    xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;
                    xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument : io.contentWindow.document;
                } else if (io.contentDocument) {
                    xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null;
                    xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document;
                }
            } catch(e) {
                jQuery.handleError(s, xml, null, e);
            }
            if (xml || isTimeout == "timeout"){
                requestDone = true;
                var status;
                try {
                    status = isTimeout != "timeout" ? "success" : "error";
                    if (status != "error") {
                        var data = jQuery.uploadHttpData(xml, s.dataType);
                        if (s.success) s.success(data, status);
                        if (s.global) jQuery.event.trigger("ajaxSuccess", [xml, s]);
                    } else jQuery.handleError(s, xml, status);
                } catch(e) {
                    status = "error";
                    jQuery.handleError(s, xml, status, e);
                }
                if (s.global) jQuery.event.trigger("ajaxComplete", [xml, s]);
                if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop");
                if (s.complete) s.complete(xml, status);
                jQuery(io).unbind();
                setTimeout(function() {try {$(io).remove(); $(form).remove()} catch(e) {jQuery.handleError(s, xml, null, e)}}, 100);
                xml = null;
            }
        }
        if (s.timeout > 0){setTimeout(function(){if (!requestDone) uploadCallback("timeout")}, s.timeout)};
        try {
            var form = $('#' + formId);
            $(form).attr('action', s.url);
            $(form).attr('method', 'POST');
            $(form).attr('target', frameId);
            if(form.encoding) form.encoding = 'multipart/form-data';                
            else form.enctype = 'multipart/form-data';
            $.each(s.data, function(key, value) {form.append($("<input type='hidden' name='" + key + "' value='" + encodeURIComponent(value) + "'/>"))});
            $(form).submit();
        } catch(e) {
            jQuery.handleError(s, xml, null, e);
        }
        if (window.attachEvent) document.getElementById(frameId).attachEvent('onload', uploadCallback);
        else document.getElementById(frameId).addEventListener('load', uploadCallback, false);
        return {abort: function(){}};
    },
    uploadHttpData: function(r, type) {
        var data = !type;
        data = type == "xml" || data ? r.responseXML : r.responseText;
        if (type == "script") jQuery.globalEval(data);
        if (type == "json") eval("data = " + data);
        if (type == "html") jQuery("<div>").html(data).evalScripts();
        return data;
    }
});


Применение в коде:
Код

data = {action:"sending_file", description:"description", text:"some text"};
$.ajaxFileUpload({url:"{your URL}", data:data, secureuri:false, fileElementId:"{ID of your input file}", dataType:"json", error:function(){}, success:
    function(data){
        alert(data);
    }    
});

PM MAIL   Вверх
AlexanderI
Дата 15.10.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.7.2004

Репутация: нет
Всего: 3



Данный код под оперу не работает. Низнаю почему. Всю голову уже сломал.


1. Ошибка: SyntaxError: at index 5 in "data = ": expected expression, got <end of file>

2. TypeError: Cannot convert 'xml' to object 


Причём если сделать так, вставить alert(), то первой ошибки не возникает. Остаётся только вторая.


Код

if(io.contentWindow){

alert();

xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;
xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;

}else if(io.contentDocument) {

xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML:null;
xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument:io.contentDocument.document;
        }

--------------------
Магазин детских игрушек  | Авто ВАЗ
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.