Получение атрибута корневого узла, jQuery / XML - PullRequest
2 голосов
/ 23 февраля 2010

это, наверное, так тривиально, что мне стыдно спрашивать об этом ...

Почему в мире это не работает?

<?xml version="1.0" encoding="UTF-8"?>
<filter id="4" max_values="10">
    <value id="9">strategy</value>
    <value id="11">simulation</value>
    <value id="12">shooter</value>
</filter>

Это ответ xml, который я получаю, когда запрашиваю страницу:

$.post('afilters/getvaluesXml', {filter_id: fid}, 
            function(response){
                var fields;
                alert(response);

                var filter_id = $(response).find('filter').attr('id');
                var max_values = parseInt($(response).find('filter').attr('max_values'));

                alert('filter_id: '+filter_id+' max_values:'+max_values);

                $(response).find('value').each(function(){
                    var id = $(this).attr('id');
                    var value = $(this).text();

                    if(max_values == 1){
                        fields = fields+'<input type="radio" name="'+filter_id+'" value="'+id+'"/>'+value+'<br/>';
                    } else {
                        fields = fields+'<input type="checkbox" name="'+filter_id+'[]" value="'+id+'"/>'+value+'<br/>';
                    }

                });
                //alert(fields);
                $('#'+filter_id+'_values').text(fields);
            });

Все работает нормально, за исключением того, что я не могу получить атрибуты filter_id и max_values. Это окно с предупреждением:

filter_id: null max_values: NaN

И почему, когда я указываю тип данных "xml", как описано в jquery .post () document , мне ничего не возвращается (ответ не получен - обратный вызов никогда не выполняется).

Ответы [ 3 ]

3 голосов
/ 23 февраля 2010

Я попытался установить dataType в xml, и он работал как брелок, взгляните на этот фрагмент:

$.post('afilters/getvaluesXml', {filter_id: fid}, function(response){
  var filter_id = $('filter', response).attr('id');
  var max_values = parseInt($('filter', response).attr('max_values'));
  alert('filter_id: '+filter_id+' max_values:'+max_values);
 }, 'xml');
2 голосов
/ 23 февраля 2010

Блин ... Ну с тобой все в порядке. Только я забыл установить правильный заголовок перед выводом xml ...

Таким образом, установка выходного заголовка на «content-type: text / xml» полностью устранила эту проблему.

Кажется, jQuery не выполнит обратный вызов, если тип содержимого не соответствует ожидаемому.

Однако странно, что все, кроме этих двух атрибутов корневого узла, сработало:)

Спасибо, что указали мне в правильном направлении.

1 голос
/ 23 февраля 2010

Может быть, не самая лучшая практика, но это работает

var filter_id = $(response).find("value:first").parent().attr('id');
var max_values = $(response).find("value:first").parent().attr('max_values');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...