powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Опера и заливка через аякс
15 сообщений из 15, страница 1 из 1
Опера и заливка через аякс
    #37885068
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем дня.
Есть код загрузки файлов с описанием через аякс:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
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;
    }
});


и вызов:
Код: javascript
1.
2.
3.
4.
5.
6.
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);
    }    
});




Под Оперой выпадают ошибки:
1. SyntaxError: at index 5 in "data = ": expected expression, got <end of file>
2. TypeError: Cannot convert 'xml' to object

Подскажите, может решение у кого уже есть?
Как можно пофиксить?
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37885162
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гуглить пробовали?
http://forum.sources.ru/index.php?showtopic=316963
вроде Ваша проблема
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37885300
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гугл я пробовал, и продолжаю искать, пока решения нет.

по вашей ссылке надпись:

гугл меня спас.

но она никак к решению проблемы не ведет.
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37885896
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно как-то молчат все на сайтах) перерыл тонну, но у кого получается те молчат)

Возникло несколько вопросов:

Куда копать?
Как гугл помог парню по ссылке выше?)
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37885922
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalamfurКак гугл помог парню по ссылке выше?)ну он что-то там пишет про очистку кеша...
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886272
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какого кеша?))

насколько я понимаю, вот тут SyntaxError: at index 5 in "data = " Опера не получает объект.
потому, что вот тут у Оперы не объект
xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;

а вот как это того самого, пока не нашел, весь день шерстил гугл.

Знатоки, ткните, как быть?
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886288
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше б вы дебагер шерстили. Может уже давно бы разобрались с проблемой. Ну или по крайней мере конкретизировали бы ее.
А так кто будет из этого скрипта рабочий пример делать и исследовать его за вас, чтобы уточнить проблему, прежде чем подумать как ее решить? =)
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886332
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalamfurКакого кеша?))

насколько я понимаю, вот тут SyntaxError: at index 5 in "data = " Опера не получает объект.
потому, что вот тут у Оперы не объект
xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;

а вот как это того самого, пока не нашел, весь день шерстил гугл.

Знатоки, ткните, как быть?

Поставить алерт и посмотреть что там на месте ошибки.

По выдраной части какого-то непонятного скрипта гадают форумные телепаты, может повезёт и встретитесь с подобным. Давно бы уже сами сделали тестовый пример с минимум кода и скинули в тему.

p.s. jQuery.handleError() - оно ещё работает? Помню исключали из jQuery.
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886673
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalamfur,

жесть какая-то, вы для каких целей жиквери используете? попытался найти ошибку, но такой код читать не могу
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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;
    },


почему нельзя по человечески на жиквери писать с минимумом трмозов?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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);
        oldElement.attr('id', fileId).before(oldElement.clone()).appendTo(form);
        return form.css({ 
                'position': 'absolute',
                'top': '-1200px',
                'left', '-1200px'
        }).appendTo('body');
    },
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886680
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вообще не понимаю почему бы не создать заранее прям в разметке невидимый iframe, нафига его творить динамически
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886703
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я еще немного подумал.
надеюсь в
url:"{your URL}"
указан нормальный урл типа " http://localhost/my file.bin", а не какой-нибудь "file:///C:/my project dir/my file.bin" ?
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886712
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель,

ну вдруг автор вынужден рботать на чужом сайте, какой-нить инклюдник который подключили должен притащить с собой ротатор рекламы и даунлоадер.
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886714
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганелья вообще не понимаю почему бы не создать заранее прям в разметке невидимый iframe, нафига его творить динамическитоесть я про форму хотел сказать
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37886721
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lanну вдруг автор вынужден рботать на чужом сайте, какой-нить инклюдник который подключили должен притащить с собой ротатор рекламы и даунлоадер.а, ну это уже оргвопрос, его решают по-разному
либо "включите себе и скрипт и разметку" как здесь: http://developers.facebook.com/docs/reference/plugins/like/
либо действительно динамически
...
Рейтинг: 0 / 0
Опера и заливка через аякс
    #37887712
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело не в iframe, дело в том что в Опере по какой-то причине в этой строке не объект
data = type == "xml" || data ? r.responseXML : r.responseText;

PS: mage.lan , код не мой, нашел готовую либу, и не хотелось её переписывать красоты ради, хотя бы потому что не пишу на яваскрипте настолько хорошо.
Потому и спросил совета, т.к. пока не разобрался.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Опера и заливка через аякс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]