24.09.2013, 22:13
|
Интересующийся
|
|
Регистрация: 24.09.2013
Сообщений: 11
|
|
парсинг XML. удаляет теги из контейнера
Возникла необходимость динамически изменять содержимое таблицы и некоторых полей. имеется форма, нужно считать с нее данные и отправить на сервер для валидации и последующего сохранения их в бд. Сервер в свою очередь должен выдать ряд ответов: о некорректности данных либо о добавлении либо изменении содержимого таблицы. Пытаюсь это все передать ХМЛ файлом, но при парсинге удаляются все теги и остается голый текст. метод .htm() тоже возвращает голое значение.
Подскажите как можно выйти из положения. Пытался скрипт отпраить - он не выполняется.
$.ajax({
url: src+"/add",
type: "POST",
data: {book_id: id, book_title: title, book_photo: photo, autor_name: autors, book_janr: janrs},
success: function(data){
$(data).find('site').each(function(){
var adr = $(this).find('name').text();
var val = $(this).find('value').html();
$(adr).html(val);
});
});
пример хмл файла:
<sites>
<site><name>input[name='book_title']</name><value>".$data[0]->book_title."</value></site>
<site><name>input[name='book_photo']</name><value>".$data[0]->photo."</value></site>
<site><name>input[name='autor_name']</name><value>".$da."</value></site></sites>;
|
|
24.09.2013, 22:45
|
|
Профессор
|
|
Регистрация: 09.07.2007
Сообщений: 304
|
|
вместо XML используйте JSON
|
|
24.09.2013, 22:47
|
Интересующийся
|
|
Регистрация: 24.09.2013
Сообщений: 11
|
|
Подскажите как его правильно использовать, что на входе, что на выходе. я пытался настроить, не получилось.
|
|
24.09.2013, 23:04
|
|
Профессор
|
|
Регистрация: 09.07.2007
Сообщений: 304
|
|
http://ru.wikipedia.org/wiki/JSON
var data = ".....";
var obj;
try {obj = JSON.parse(data) }catch(e){};
obj - наши данные в виде обьекта. если в data будет невалидный JSON то JSON.parse вызовет исключение, потому и нужен try catch
Последний раз редактировалось vflash, 24.09.2013 в 23:19.
|
|
25.09.2013, 01:12
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от ur5fdg
|
Возникла необходимость динамически изменять содержимое таблицы и некоторых полей. имеется форма, нужно считать с нее данные и отправить на сервер для валидации и последующего сохранения их в бд. Сервер в свою очередь должен выдать ряд ответов: о некорректности данных либо о добавлении либо изменении содержимого таблицы. Пытаюсь это все передать ХМЛ файлом, но при парсинге удаляются все теги и остается голый текст. метод .htm() тоже возвращает голое значение.
Подскажите как можно выйти из положения. Пытался скрипт отпраить - он не выполняется.
|
Как вариант, при вставке в форму кодирнуть контент через encodeURIComponent,
на серве - раскодировать... и распарсить
Зы: есть проблемы при использовании на сайтах с кодировкой windows-1251
|
|
25.09.2013, 03:49
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
На сервере (php) используй json_encode()
На клиенте добавь параметр dataType: 'json' , или третьим аргументом (после callback-функции) строку 'json' или на сервере выставь заголовок Content-Type: application/json (самый верный способ, но из-за кривости рук редко используемый)
__________________
В личку только с интересными предложениями
|
|
25.09.2013, 03:51
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
А чтоб с xml использовать, нужно тоже самое сделать, только dataType: 'xml' и заголовок Content-Type: application/xml
__________________
В личку только с интересными предложениями
|
|
25.09.2013, 03:53
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
А голый текст у тебя потому что HTML внутри XML нужно экранировать через <![CDATA[ ... ]]>
__________________
В личку только с интересными предложениями
|
|
25.09.2013, 10:37
|
Интересующийся
|
|
Регистрация: 24.09.2013
Сообщений: 11
|
|
Сделал тестовый скриптик, как вы советовали:
$.ajax({
url: src+"/add",
type: "POST",
dataType:'json',
data: {book_id: id, book_title: title, book_photo: photo, autor_name: autors, book_janr: janrs},
success: function(data){
try{
var obj = $.parseJSON(data);
alert(obj.name);
}catch(e){
alert('Опапа - приплыли')}
},
});
а на сервере следующее:
$data = array ("name"=>"Иван", "surname"=>"Иванов");
echo json_encode($data);
вылетает в обработчик исключительной ситуации. смотрел принимаемые данные - пишет что объект. а в отладчике говорит что обращение к NULL
P.S. работаю CodeIgniter принимаю данные методом контроллера, заголовков не ставил.
Последний раз редактировалось ur5fdg, 25.09.2013 в 10:43.
|
|
25.09.2013, 10:57
|
Интересующийся
|
|
Регистрация: 24.09.2013
Сообщений: 11
|
|
$data = array ("name"=>"Иван", "surname"=>"Иванов");
$this->output->set_content_type('application/json');
$this->output->set_output(json_encode($data));
Такая конструкция тоже результат не дала
|
|
|
|