Почему этот плагин может загружать файлы через ajax? - PullRequest
2 голосов
/ 21 августа 2011

Мы знаем, что файл не может быть загружен через ajax, но я не понимаю, почему этот плагин для загрузки файлов ajax использует обычный ajax?

_upload: function(id, params){
        var file = this._files[id],
            name = this.getName(id),
            size = this.getSize(id);

        this._loaded[id] = 0;

        var xhr = this._xhrs[id] = new XMLHttpRequest();
        var self = this;

        xhr.upload.onprogress = function(e){
            if (e.lengthComputable){
                self._loaded[id] = e.loaded;
                self._options.onProgress(id, name, e.loaded, e.total);
            }
        };

        xhr.onreadystatechange = function(){            
            if (xhr.readyState == 4){
                self._onComplete(id, xhr);                    
            }
        };

        // build query string
        params = params || {};
        params['qqfile'] = name;
        var queryString = qq.obj2url(params, this._options.action);

        xhr.open("POST", queryString, true);
        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
        xhr.setRequestHeader("Content-Type", "application/octet-stream");
        xhr.send(file);
    }

Мне не нравитсяэтот плагин, потому что вы не можете использовать его с jquery и целевой элемент всегда должен быть ID,

function createUploader(){            
            var uploader = new qq.FileUploader({
                element: document.getElementById('file-uploader-demo1'),
            action: 'upload-file.php',
                onComplete: function(id, fileName, responseJSON){alert(responseJSON[0].filename)},
                debug: true
            });           
        }

        // in your app create uploader as soon as the DOM is ready
        // don't wait for the window to load  
        window.onload = createUploader;  

Это было бы то, что мне нужно, если я могу сделать что-то подобное с jquery, но я просто не знаю,как сделать изменения исходного кода, потому что он написан на простом JavaScript!

element: $('.upload'), or  element: $('#upload'),

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Просто чтобы дать вам еще один вариант, есть несколько хороших загрузчиков файлов, написанных с использованием jquery. Я рекомендую Uploadify , если вы хотите попробовать другие. Тем не менее, этот загрузчик требует вспышки.

Edit: Я не знаю, как этот загрузчик работает с использованием ajax; это может быть сделано в html5, как упомянул Шин. Тем не менее, после небольшого поиска в stackoverflow кажется, что вы можете попробовать это, чтобы заставить его работать с селекторами jquery:

element: $('#upload')[0];

Я нашел это решение из вопроса document-getelementbyid-vs-jquery

0 голосов
/ 21 августа 2011

Это выглядит как HTML5.Вы можете сделать загрузку файла через AJAX в HTML5.http://blog.new -bamboo.co.uk / 2010 / 7/30 / html5 питанием-Ajax-закачка файлов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...