Я только что столкнулся с той же проблемой, и я думаю, что это связано с тем, что загрузка файлов XHR не поддерживается в IE (даже 9).Вот то, что, как я полагаю, происходит, и мое решение:
Поскольку Safari 5+, Firefox 4+ и Chrome поддерживают загрузку файлов XHR, плагин fileupload может передавать файлы действительно асинхронно, что позволяет получить чистый текстовый ответ отсервер.Этот чистый текстовый ответ доступен через data.result
в обработчике done
и может быть легко использован.
Однако в IE передача файла происходит через полное обновление страницы в скрытом фрейме, что приводит кdata.result
в обработчике done
является полным document
объектом с текстом ответа, завернутым глубоко в теги <html><body><iframe><pre>
.
Мало того, что это затрудняет доступ к данным вТо есть, это делает способ доступа к данным разным в разных браузерах.
Мое решение:
Я установил для параметра forceIframeTransport
значение true, что позволяет всем браузерам передавать файлы со скрытым iframe., как IE.К сожалению, упустить загрузку файлов XHR, но это, по крайней мере, дает нам одинаковый ответ во всех браузерах.Затем в моем обработчике done
я извлек результат из объекта document
следующим образом:
var result = $( 'pre', data.result ).text();
В вашем случае, я думаю, код будет выглядеть примерно так:
$('input#fileupload').fileupload({
forceIframeTransport: true,
url: '/upload',
done: function ( e, data ) {
var result = $( 'pre', data.result ).text();
if( result != null && $.trim( result ) != '' )
$( 'a#attachment' ).html( result );
}
...
Также важно отметить, что тип содержимого ответа от моего сервера - «text / plain».Как вы могли заметить, IE иногда предлагает пользователю сохранить или открыть ответ json.
Вот несколько ссылок, которые оказались полезными при решении проблемы: https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support (см. Раздел «XMLHttpRequest»).внизу) https://github.com/blueimp/jQuery-File-Upload/wiki/Options (см. «forceIframeTransport» примерно на 1/3 пути вниз)
Надеюсь, это поможет!