JQuery эквивалент загрузки XMLHttpRequest?

Работа с API файлов HTML5, загрузка осуществляется через объект upload в XMLHttpRequest. Это - это учебное пособие, с которым я работаю (и зеркало кэш Google, так как это сейчас), Это важная часть:

// Uploading - for Firefox, Google Chrome and Safari
xhr = new XMLHttpRequest();

// Update progress bar
xhr.upload.addEventListener("progress", function (evt) {

Как вы можете видеть, для отслеживания процесса загрузки объект XMLHttpRequest имеет свойство с именем upload, которое мы можем добавить обработчик события.

Мой вопрос: имеет jQuery эквивалент?. Я пытаюсь оставить код таким же чистым, как и кросс-браузерным, насколько это возможно, поскольку всякий раз, когда Microsoft думает, что это хорошая идея (хотя это выглядит как это будет в 2012 или 2013 году).

Ответ 1

Вот что я придумал, чтобы обойти эту проблему. Вызов $.ajax() позволяет обеспечить обратный вызов для генерации XHR. Я просто генерирую его перед вызовом запроса, его настройкой, а затем создаю закрытие, чтобы вернуть его, когда понадобится $.ajax(). Было бы намного проще, если бы они просто предоставили доступ к нему через jqxhr, но они этого не делают.

var reader = new FileReader();

reader.onloadend = function (e) {
    var xhr, provider;

    xhr = jQuery.ajaxSettings.xhr();
    if (xhr.upload) {
        xhr.upload.addEventListener('progress', function (e) {
            // ...
        }, false);
    }   
    provider = function () {
        return xhr;
    };  

    // Leave only the actual base64 component of the 'URL'
    // Sending as binary ends up mangling the data somehow
    // base64_decode() on the PHP side will return the valid file.
    var data = e.target.result;
    data = data.substr(data.indexOf('base64') + 7); 

    $.ajax({
        type: 'POST',
        url: 'http://example.com/upload.php',
        xhr: provider,
        dataType: 'json',
        success: function (data) {
            // ...
        },  
        error: function () {
            // ...
        },  
        data: {
            name: file.name,
            size: file.size,
            type: file.type,
            data: data,
        }   
    }); 
};  
reader.readAsDataURL(file);

Ответ 2

документация для jqXHR (надмножество XMLHttpRequest, которое возвращается из вызова jQuery.ajax()) не описывает обновление как экспонируется, что не означает, что он не подвергается воздействию. Этот вопрос, однако, указывает на то, что загрузка не отображается. Ответ обеспечивает способ доступа к собственному объекту XMLHttpRequest.

В версиях до jQuery 1.5 объект XMLHttpRequest просматривался напрямую, поэтому вы можете получить доступ к любой его функции, поддерживаемой браузером. Этот учебник для создания перетаскивателя позволяет сделать это.

Поиск jquery html 5 загрузка файла вызывает this плагин, чтобы выполнить многократную загрузку файлов с использованием API-интерфейса HTML 5, но этот плагин в настоящее время не работает в IE. Если вы не хотите использовать HTML 5 и вместо этого хотите иметь поддержку кросс-браузера, есть другие плагины, которые вы можете изучить для jQuery на сайте плагина jQuery.