Я работаю над "множественным 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 так портит заголовки?