JQuery File Uploader IE9 Не публикует никаких параметров при загрузке
Я использую плагин для загрузки файлов jQuery вместе с rails 3. Плагин здесь:
https://github.com/blueimp/jQuery-File-Upload
Я использую плагин, чтобы позволить пользователю загружать фотографию профиля. Решение до сих пор работает с Chrome, Safari и Firefox. Однако на IE это не удается. Когда вы выбираете файл в IE, плагин отправляет на сервер, но нет параметров, это пустое сообщение.
Пример поста в chrome:
Started PUT "/api/1/settings/ajax_photo_upload" for 10.0.1.3 at 2012-10-02 15:39:20 -0700
Processing by ApiV1::SettingsController#ajax_photo_upload as JS
Parameters: {"photo"=>#<ActionDispatch::Http::UploadedFile:0x007f9e4bac2e48 @original_filename="xxxxx.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[photo]\"; filename=\"xxxxx.jpeg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/var/folders/3x/k1yb0r4s07q1jm82kq93ch180000gn/T/RackMultipart20121002-3633-sxsbtu>>}, "update_type"=>"general"}
Однако в IE9 он ничего не передает:
Started PUT "/api/1/settings/ajax_photo_upload" for 10.0.1.10 at 2012-10-02 15:39:31 -0700
Processing by ApiV1::SettingsController#ajax_photo_upload as JS
Вот моя реализация:
$('input[type="file"]').fileupload({
url : '/api/1/settings/ajax_photo_upload',
formData : [{
name : 'authenticity_token',
value : $('meta[name="csrf-token"]').attr('content')
}],
type : 'PUT',
dataType: 'json',
add : function (e, data) {
data.submit();
}
});
HTML
<input name="user[photo]" type="file" accept="image/*" >
Есть идеи, почему IE будет делать это? Спасибо
3 ответа
Вы используете основной плагин? У меня была такая же проблема, и я боролся с ней один день, чтобы понять, что я не включил плагин jquery.iframe-transport.js:
<script src="js/jquery.iframe-transport.js"></script>
Смотрите документацию здесь.
Ой! и спасибо за ваш фрагмент о включении пары ключ-значение "authenticity_token" в качестве "formData" - это помогло мне избавиться от предупреждения rails 3 "ПРЕДУПРЕЖДЕНИЕ: не удается проверить подлинность токена CSRF"
$("#txt1").fileupload({
replaceFileInput: false,
dataType: "json",
datatype:"json",
url: "<%=Page.ResolveUrl("~/WebService/AddAttachment.ashx")%>",
done: function (e, data) {
$.each(data.result, function (index, value) {
//You get the response data in here from your web service
})
$("#txt1").val("");
}`enter code here`
});
Это проверено и отлично работает в IE8 и IE9 + выше. Убедитесь, что вы используете правильный dataType:"json" (или datatype:"json"), а также убедитесь, что ваш ответ метода веб-службы правильно обновлен до data.result при отладке и проверке. Спасибо
В основном речь идет о поддержке тегов данных html 5. IE9 имеет серьезные проблемы с этим. Например, когда вы загружаете изображение, в chrome он отправляет данные:blob и дает вам предварительный просмотр перед тем, как вы фактически загрузите изображение. В IE вы не можете. Посмотрите экран вложений почты Gmail в IE9, вы увидите разницу. Если это крупномасштабный проект, я советую вам использовать Flash в качестве загрузчика изображений.