Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   парсинг XML. удаляет теги из контейнера (https://javascript.ru/forum/jquery/41678-parsing-xml-udalyaet-tegi-iz-kontejjnera.html)

ur5fdg 24.09.2013 22:13

парсинг 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>;

vflash 24.09.2013 22:45

вместо XML используйте JSON

ur5fdg 24.09.2013 22:47

Подскажите как его правильно использовать, что на входе, что на выходе. я пытался настроить, не получилось.

vflash 24.09.2013 23:04

http://ru.wikipedia.org/wiki/JSON
var data = ".....";
var obj;
try {obj = JSON.parse(data) }catch(e){};

obj - наши данные в виде обьекта. если в data будет невалидный JSON то JSON.parse вызовет исключение, потому и нужен try catch

Deff 25.09.2013 01:12

Цитата:

Сообщение от ur5fdg
Возникла необходимость динамически изменять содержимое таблицы и некоторых полей. имеется форма, нужно считать с нее данные и отправить на сервер для валидации и последующего сохранения их в бд. Сервер в свою очередь должен выдать ряд ответов: о некорректности данных либо о добавлении либо изменении содержимого таблицы. Пытаюсь это все передать ХМЛ файлом, но при парсинге удаляются все теги и остается голый текст. метод .htm() тоже возвращает голое значение.
Подскажите как можно выйти из положения. Пытался скрипт отпраить - он не выполняется.

Как вариант, при вставке в форму кодирнуть контент через encodeURIComponent,
на серве - раскодировать... и распарсить
Зы: есть проблемы при использовании на сайтах с кодировкой windows-1251

danik.js 25.09.2013 03:49

На сервере (php) используй json_encode()
На клиенте добавь параметр dataType: 'json' , или третьим аргументом (после callback-функции) строку 'json' или на сервере выставь заголовок Content-Type: application/json (самый верный способ, но из-за кривости рук редко используемый)

danik.js 25.09.2013 03:51

А чтоб с xml использовать, нужно тоже самое сделать, только dataType: 'xml' и заголовок Content-Type: application/xml

danik.js 25.09.2013 03:53

А голый текст у тебя потому что HTML внутри XML нужно экранировать через <![CDATA[ ... ]]>

ur5fdg 25.09.2013 10:37

Сделал тестовый скриптик, как вы советовали:
$.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:57

$data = array ("name"=>"Иван", "surname"=>"Иванов");
$this->output->set_content_type('application/json');
$this->output->set_output(json_encode($data));
Такая конструкция тоже результат не дала


Часовой пояс GMT +3, время: 10:30.