Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / jQuery-File-Upload + Spring MVC != IE6 / 9 сообщений из 9, страница 1 из 1
30.04.2013, 15:07:12
    #38245338
Шаров Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
Использую jQuery-File-Upload UI для загрузки файлов на сервер с контроллером на Spring.
На FF работает нормально, на IE6 тоже работает, но не обрабатывается ответ от контроллера.
IE предлагает сохранить ответ JSON в файл :(.
Я понимаю ответ толжен быть обработан UI компонентом, а он выпадет на сохранение.

Вроде пишут, что IE 6 не распознаёт JSON и нужно ответу менять Content-type на text/html. Проверял не помогло.
...
Рейтинг: 0 / 0
30.04.2013, 15:45:26
    #38245412
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
Ох уж этот ie6, давно пора запретить его законом. А в более актуальных версиях проверяли?
У меня в IE вполне себе работает
Код: java
1.
response.getWriter().print("{documentId:'"+documentId+"'}");


На приемной стороне правда сторонний AjaxUpload. Но в 6 проверить не могу, а был ли этот код в проекте, когда имелся IE6 - уже не помню.
А вот кстати код из этого AjaxUpload, относящийся к IE6, может что-то прояснит (см.комментарии):
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
...
	if (doc.XMLDocument){
		// response is a xml document IE property
		response = doc.XMLDocument;
	} else if (doc.body){
		// response is html document or plain text
		response = doc.body.innerHTML;
		if (settings.responseType && settings.responseType.toLowerCase() == 'json'){
			// If the document was sent as 'application/javascript' or
			// 'text/javascript', then the browser wraps the text in a <pre>
			// tag and performs html encoding on the contents.  In this case,
			// we need to pull the original text content from the text node's
			// nodeValue property to retrieve the unmangled content.
			// Note that IE6 only understands text/html
			if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE'){
				response = doc.body.firstChild.firstChild.nodeValue;
			}
			if (response) {
				response = window["eval"]("(" + response + ")");
			} else {
				response = {};
			}
		}
	} else {
		// response is a xml document
		var response = doc;
	}
...
...
Рейтинг: 0 / 0
30.04.2013, 16:08:24
    #38245460
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
Ну то есть вроде получается, что браузеры оборачивают ajax - ответы 'text/javascript' в <pre> и только IE6 так не делает. Возможно, jQuery-File-Upload этого не учитывает. Значит, вам надо на стороне сервера обернуть свой json, предварительно узнав тип браузера:
Код: java
1.
request.getHeader("User-Agent")
...
Рейтинг: 0 / 0
30.04.2013, 16:57:41
    #38245566
Шаров Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
ivanra,

Блин, я в контроллере использую @ResponceBody, а Spring сам заворачивает в JSON.
Я пробовал менять ContentType, но видно при обработке @ResponceBody он перезатирается.

Придётся искать как вручную собирать JSON :(.
...
Рейтинг: 0 / 0
30.04.2013, 17:05:38
    #38245592
Шаров Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
ivanraНу то есть вроде получается, что браузеры оборачивают ajax - ответы 'text/javascript' в <pre> и только IE6 так не делает. Возможно, jQuery-File-Upload этого не учитывает. Значит, вам надо на стороне сервера обернуть свой json, предварительно узнав тип браузера:


Уточнение.

Я активно использую jquery ajax запросы, в ответ формируются ответы в JSON и никаких проблем (в IE6 в том числе) с приёмом JSON не наблюдается.

Думаю, проблема в IE с ответом только для запросов типа UPLOAD !
...
Рейтинг: 0 / 0
30.04.2013, 17:07:52
    #38245597
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
Советую сначала взять какой-нибудь современный браузер со средствами разработки и посмотреть ответ сервера. А дальше - в исходики jQuery-File-Upload - смотреть что ему там не хватает
...
Рейтинг: 0 / 0
01.05.2013, 00:50:29
    #38245904
Шаров Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
ivanra,

ivanra,

Каменный цветок не вышел :(.

У меня возвращается json объект, другого способа пока не знаю.

Если отправлять json c content-type=text/html, Browser IE6 перестаёт предлагать скачать ответ в виде attachment, но jQuery-File-Upload ломается где-то внутри, т.к. не может обработать ответ.

Пробовал заворачивать json в pre, но потом дочитался, что в примере ответ был в 'application/javascript' (погуглю в эту сторону).

Опыта с JQuery у меня пока не много :(, а jQuery-File-Upload большой и по-моему проблема в jquery, который text/html не будет парсить как json, отсюда и ошибка разбора и получения ответа.

Ещё пороюсь немного и попробую искать другую библиотеку :(.
Даже не знаю с чего начать. Если на каждой либе терять по 3 дня, так можно и умереть раньше, чем напишешь программу.
...
Рейтинг: 0 / 0
01.05.2013, 05:52:28
    #38245928
Шаров Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
Шаров Сергейivanra,

Блин, я в контроллере использую @ResponceBody, а Spring сам заворачивает в JSON.
Я пробовал менять ContentType, но видно при обработке @ResponceBody он перезатирается.

Придётся искать как вручную собирать JSON :(.


ivanra,

Решение найдено для IE6

Принцип: Если гора не идёт к Магомету, то Магомет идёт к горе.

Если IE6 не понимает json, то почему бы не использовать XML.

jQueryFileUpload имеет опцию dataType.

Везде в примерах использеутся JSON, я собрал контроллер, который возвращает XML.
Настроил опцию dataType: "xml" и получил в объекте запроса XML дерево для последующей обработки. Но.... опять ошибка. IE принимает XML но ничего не делает с ним.

Тогда я принялся за dataType: "text". Только он и смог пройти через IE6 в JqueryFileUpload.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
$("<input/>")
					.attr('size',1)
					.attr('type','file')
					.attr('name', 'files[]')
					.attr('multiple', true)
					.attr('data-form-data', '{\"script\": \"true\"}')
					.appendTo(that._element_upload_file)
					
					.fileupload({
					    url: options.upload_file.url+"?propertyName="+options.document_property+"&desc="+options.name 
					    , dataType: "text"
					    , done: function(e, data){
                                                // Превратим текст в объект JSON
						var json = $.parseJSON(data.result);
						//alert( " json="+JSON.stringify(json) );
					        that.showUploadFile( json );
					    }
					});



Контроллер на Spring3

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
@Controller
....

@RequestMapping(value="/doc_upload_textjson.do", method=RequestMethod.POST) 
	public void addDocFileJson(
			HttpServletRequest request
			, HttpServletResponse response
			, @RequestParam("propertyName") String propertyName
			, @RequestParam("desc") String desc
			)	 throws IOException {
		//
		
		String retMime = MediaType.TEXT_PLAIN_VALUE;

		// Получаем объект ответа в любом JavaBean
		TextXmlUploadResult result = addDocFile(request, response, propertyName, desc);
		
		try {            
			response.setContentType( retMime+"; charset=utf-8" );
			
			ObjectMapper mapper = new ObjectMapper();
		
			OutputStream os = response.getOutputStream();
			// Маршализируем java объект в JSON  в ст.поток ответа
			mapper.writeValue(os, result);
			
		} catch (Exception e) {
			e.printStackTrace();
		}    
	}



Перебор для IE6 различных Content-Type, привел к тому с чего начал - передаётся назад компоненте jQueryFileUpload только текст text/html или text/plain, а в тексте лучше всего JSON.

При этом если в тексте передавать xml, то он портится броузером, в тексте появляются пробелы и лишние знаки, после чего распарсить в xml эту строку уже нельзя :(. Криворукий M$. Да и зачем дважды преобразовывать text -> xml -> json, лучше сразу text -> json.

На стороне сервера JavaBean -> String JSON с использованием ObjectMapper от fastxml.
На стороне клиента text -> JSON с использованием jQuery.parseJSON.
...
Рейтинг: 0 / 0
06.05.2013, 09:37:32
    #38248537
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jQuery-File-Upload + Spring MVC != IE6
Поздравляю, повезло. Осталось проверить IE7, 8 и 9. Поскольку официально поддерживается Microsoft Internet Explorer 10.0+
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / jQuery-File-Upload + Spring MVC != IE6 / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]