Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   не работает парсинг XML в IE (https://javascript.ru/forum/jquery/11463-ne-rabotaet-parsing-xml-v-ie.html)

Enxiro 25.08.2010 09:37

не работает парсинг XML в IE
 
Здравствуйте.
Имею следующую функицю
function getCategories(xml){
	var success = 0;

	jQuery(xml).find('cat').each( function(){
		if(success == 0)
		{
			jQuery('#categories').append('<option value=null>- Выберите -</option>');				
		}
        jQuery('#categories').append('<option value=' + jQuery(this).attr('id') + '>'+jQuery(this).text()+'</option>');
		success = 1;
	});
	return success;
}

То бишь на вход приходит XML, в нём находим <cat>...</cat> и добавляем это в select.
В Mozilla, Chrome, Opera работает замечательно. В горячо любимом мной IE 8 не работает..
не срабатывает each().

Данные в переменной xml следующие:
<?xml version="1.0" encoding="windows-1251"?><categories><cat id='34'>Жилая недвижимость</cat><cat id='36'>Коммерческая недвижимость</cat></categories>

В чем может быть причина подскажите пожалуйста?
Может как-то ещё можно по быстрому распарсить?

Octane 25.08.2010 09:41

Используйте JSON

Enxiro 25.08.2010 10:23

а есть простой способ преобразовать JSON строку полученную от сервера в массив?
порылся в инете и пока что только через регулярные выражения нашёл решение. но что то оно не очень нравится. я через регулярные мог и XML тогда распарсить наверное..

Kolyaj 25.08.2010 10:34

Enxiro,
а вы знаете, что такое JSON? Судя по вопросам не знаете.

Octane 25.08.2010 10:35

Конечно есть. В современных браузерах есть встроенный объект JSON, метод parse которого служит для преобразования JSON-строки в JavaScript-объект. Для остальных браузеров этот объект можно добавить http://www.json.org/js.html

Ваши данные в JSON-строке выглядели бы так:
{"34": "Жилая недвижимость", "36": "Коммерческая недвижимость"}


Преобразуем в JavaScript-объект:
var data = JSON.parse('{"34": "Жилая недвижимость", "36": "Коммерческая недвижимость"}');

alert(data[36]);


В jQuery есть методы для работы с JSON.

Разбор xml на клиенте сейчас используют разве что в каких нибудь шаблонизаторах.

Enxiro 25.08.2010 11:28

Цитата:

Сообщение от Kolyaj (Сообщение 68563)
Enxiro,
а вы знаете, что такое JSON? Судя по вопросам не знаете.

Хотел было уже материться, мол знаю, JSON - это строка сформированная определённым образом..
Но как оказалось действительно не знаю.
И решение оказалось достаточно простое.
Пишу для остальных.

Получив от сервера объект JSON скажем в переменную obj можем добираться до элементов легко: obj.element_name

Вот скажем у меня сервер формировал строку
echo json_encode(array(0=>array('orig' => 'orig1', 'name' => 'name1'), 1=>array('orig' => 'orig2', 'name' => 'name2')));

В JavaScript пройтись по этим элементам можно следующим образом:
jQuery.getJSON('index.php?option=com_ajaxsearch&amp;no_html=1', {v: val}, function(obj)
{
	for(var i=0; i<obj.length; i++)
		alert(obj[i].orig);
});


Вот.
А вариант с var data = JSON.parse почему то не работал.
И так ещё пробовал var response = eval(" (" + datac + ") ");
тоже не работал. Выдавал "missing ] after element list"

Ладно. Спасибо всем за советы.

Kolyaj 25.08.2010 12:26

Цитата:

Сообщение от Enxiro
JSON - это строка сформированная определённым образом..

И ведь не поспоришь :)
Правда HTML, CSS, JavaScript, C++, C#, Java, Erlang и многое другое тоже являются строками, сформированными определённым образом.


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