Ответ сервера в плугине ajaxForm отдается неправильно.
Использую jQuery плугин ajaxForm для отправки формы с параметрами и upload files. Функция этого плугина $ajaxSubmit
работает нормально. Все параметры пересылаются, файл загружается, сервер формирует ответ и я его получаю по success $("#form_upload").ajaxSubmit( { data: outData, iframe: true, dataType: "text/html; charset=UTF-8", success: function(data){ parsingResult(data); } //принимает ответ от сервера } Но!!! я c сервера отсылаю строку вот такого вида, с экранироваными ковычками. [\"<div height='34px' width=15px class=\\\"error\\\">По этому запросу ни чего не найдено.</div>\"] получаю уже в success: function(data) измененную, что меня очень не устраивает. ["<div height="34px" width="15px" class="\"error\"">По этому запросу ни чего не найдено.</div>"] Как я понимаю это происходит потому, что ответ сервера вначале вставляется в document, а потом из него отдается success: function(data). а раз вставился в document, то сам браузер уже распарсил передаваемый текст и заменил все по своему усмотрению. Тем более FF и IE отдают разные стринги. Вот и вопрос, Как получить ответ сервера напрямую, без обработки при вставлении в document. Сижу, инет перелапачиваю уже 3 день... и все без толку. А в сорсах ajaxForm что-то разобраться не могу. Заранее благодарен тому гуру кто в этом понимает. |
Что за бред? Никто никуда ничего не вставялет. Примените другой dataType, ато все-таки не особо похоже на хтмл то, что Вы получаете от сервера :) К примеру, dataType: 'json'. (Да, и емнип dataType != encoding)
|
Естественно, перепробовал все варианты dataType.
И кстати, не бред. В сорсах изменил позицию вывода iframe, так что бы видно было что туда вносится после ответа сервера Код:
var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" />'); Если без файла, то ни каких проблем с кодировкой. По коду видно, что если есть файл для аплоада то iframe в страницу обязательно добавляется (Ajax что бы без перезагрузки страницы работало). Попробую перед посылкой с сервера html.encode делать, а потом decode |
Просмотрел код. Попробуйте так: dataType: 'json', + передавайте с сервера свою строку, как value textarea. То еть ответ с сервера будет типа
<textarea>[\"<div height='34px' width=15px class=\\\"error\\\">По этому запросу ни чего не найдено.</div>\"]</textarea> В этом случае плагин должен выбрать значение textarea и вернуть его в responseText. |
После использования textarea получаю вот такую строку
Код:
<textarea>["<div height='34px' width=15px class=\"error\">По этому запросу ни чего не найдено.</div>"]</textarea> Решение своей проблемы нашел. Перед отсылкой с сервера обрабатываю мою строку Html.Encode, а после получения из iframe делаю Html.Decode Хотя, может что нибудь вместо <textarea> попробовать, поэксперементировать. Что бы Encode/Decode не использовать. Ведь после <textarea> можно Decode сделать и отсечь сам тэги с textarea, то получу требуемое... У меня много длинных стрингов передается, интересно какой способ из этих менее ресурсоёмчее |
Что-то путаница у нас с Вами какая-то. Вот тестовая страница:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Без имени</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="generator" content="Geany 0.18" /> </head> <body> <textarea>[\"<div height='34px' width=15px class=\\\"error\\\">По этому запросу ни чего не найдено.</div>\"]</textarea> <button onclick="alert(document.getElementsByTagName('textarea')[0].value)">Get Value</button> </body> </html> Выводит без экранирования. Дайте ссылку на проблемную страничку, или реализуйте тестовую, которая описывает проблему. |
Потестировал. Ваш вариант просто с textarea, работает без проблем.
Загрузил его во фрэйм Код:
<iframe id="ifr" name="ifr" src="file_with_textarea.htm"></iframe> |
Так с innerHTML так и должно быть, вроде как. Смотрите не innerHTML, а
document.frames['ifr'].document.getElementsByTagName('textarea')[0].value |
Точно. попробовал с
Код:
document.frames['ifr'].document.getElementsByTagName('textarea')[0].value Спасибо! Теперь надо попробовать в исходниках ajaxForm, исправить взятие данных из фрейма с innerHtml на value. А затем протестировать в моем приложении Обязательно напишу, получилось ли это у меня |
К удивлению быстро получилось в плугине поменять
Код:
с Просто вроде где-то читал, что getElementsByTagName не везде работает корректно. Это так? |
Часовой пояс GMT +3, время: 14:57. |