XmlHttpRequest повреждает заголовки в Firefox 3.6 с помощью «Content-Type: multipart / form-data» - PullRequest
1 голос
/ 15 июля 2010

Я работаю над "множественным ajax uloader".Прекрасно работает в современных браузерах (Chrome 6, Firefox 4).Но в Firefox 3.6 я должен вручную создать строку вывода для отправки, потому что этот браузер не поддерживает объект FormData.

Я следовал многим урокам, особенно это .Автор уведомляет о правильной настройке заголовков и содержимого отправляемого тела.Я тщательно следовал советам, но Firefox 3.6 провалил мои усилия.

Это правильная настройка заголовков и тела (фиксируется при отправке простой статической формы): правильные заголовки , правильное тело

Это то, что я получаю, когда использую объект xhr в Firefox для отправки тех же данных: неверные заголовки , неправильное тело

AsВы можете увидеть, что заголовки xhr повреждены.Это приводит к полной неудаче загрузки файла.Вот код, который я использую:

function generateBoundary()
{
    var chars = '0123456789',
        out   = '';

    for( var i = 0, len = chars.length; i < 30; i++) {
       out += chars[Math.floor(Math.random()*len)];
    }

    return '----' + out;
}

function getMultipartFd(file, boundary)
{
    var rn   = '\r\n',
        body = '';

    body  = boundary + rn;
    body += 'Content-Disposition: form-data; name="Files[]"; filename="' + file.name + '"' + rn;
    body += 'Content-Type: ' + file.type + rn + rn;
    body += file.getAsBinary() + rn;

    return body;
}

$(function(){

    $startUpload.click(function(){
        var url      = $uploadForm.attr('action'),
            xhr      = new XMLHttpRequest(),
            boundary = generateBoundary(),
            file     = null,
            body     = '';

        file = $SOME_ELEMENT_WITH_ATTACHED_FILE.file;
        body = getMultipartFd(file, boundary);

console.info(file);
console.info(body);

        xhr.upload.onload = function(){
            console.info('done');
        };

        xhr.open('POST', url, true);
        xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
        xhr.sendAsBinary(body + boundary + '--' + '\r\n');
        return false;
    });

});

Здесь также дамп переменных файла и тела: файл дампа , тело дампа

У кого-нибудь есть идеи, почему xhr так портит заголовки?

1 Ответ

0 голосов
/ 16 июля 2010

У меня была проблема с областью видимости. Я пытался использовать код в новой установке Firefox под WinXP (моя основная система - Arch Linux). Проблема остается. Я обнаружил, что Mozilla xhr имеет дополнительное свойство, называемое «multipart». Если для этого параметра установлено значение true, с заголовками все в порядке, но мои xhr.events не запускаются - сбой JS после отправки файла.

Я немного углубился в JS-отладчик Firebug и обнаружил, что после xhr.multipart = true; код попадает в глубокие воды библиотеки jQuery, где странные вещи происходят вокруг некоторых любопытных событий.

Еще более любопытно, что заголовки / содержимое в консоли Firebug кажутся правильными, но в расширении HttpFox оно повреждено.

...