Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Опера и заливка через аякс / 15 сообщений из 15, страница 1 из 1
19.07.2012, 11:49:52
    #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
19.07.2012, 12:28:42
    #37885162
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опера и заливка через аякс
гуглить пробовали?
http://forum.sources.ru/index.php?showtopic=316963
вроде Ваша проблема
...
Рейтинг: 0 / 0
19.07.2012, 13:49:08
    #37885300
kalamfur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опера и заливка через аякс
Гугл я пробовал, и продолжаю искать, пока решения нет.

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

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

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

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

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

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

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

Знатоки, ткните, как быть?
...
Рейтинг: 0 / 0
20.07.2012, 02:51:21
    #37886288
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опера и заливка через аякс
Лучше б вы дебагер шерстили. Может уже давно бы разобрались с проблемой. Ну или по крайней мере конкретизировали бы ее.
А так кто будет из этого скрипта рабочий пример делать и исследовать его за вас, чтобы уточнить проблему, прежде чем подумать как ее решить? =)
...
Рейтинг: 0 / 0
20.07.2012, 08:29:08
    #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
20.07.2012, 11:49:21
    #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
20.07.2012, 11:51:36
    #37886680
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опера и заливка через аякс
я вообще не понимаю почему бы не создать заранее прям в разметке невидимый iframe, нафига его творить динамически
...
Рейтинг: 0 / 0
20.07.2012, 12:00:33
    #37886703
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опера и заливка через аякс
я еще немного подумал.
надеюсь в
url:"{your URL}"
указан нормальный урл типа " http://localhost/my file.bin", а не какой-нибудь "file:///C:/my project dir/my file.bin" ?
...
Рейтинг: 0 / 0
20.07.2012, 12:02:44
    #37886712
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опера и заливка через аякс
Паганель,

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

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


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