获取根节点属性,jQuery / XML

时间:2010-02-22 22:28:05

标签: jquery xml ajax response

这可能是如此微不足道,我很惭愧地问这个......

为什么世界上这不起作用?

<?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

而且,为什么当我按照jquery .post() docu中的描述指定数据类型“xml”时,没有任何东西可以回复给我(没有收到任何响应 - 从不执行回调)。

3 个答案:

答案 0 :(得分:3)

我尝试将 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');

答案 1 :(得分:2)

该死的......好吧,你没事。在输出xml之前忘记设置正确的标题只是我...

因此将输出标题设置为“content-type:text / xml”完全解决了这个问题。

似乎jQuery在内容类型不符合预期时不会执行回调。

然而,除了这两个根节点属性之外,所有内容都很有效:)

感谢您指点我正确的方向。

答案 2 :(得分:1)

也许不是最好的做法,但它有效

var filter_id = $(response).find("value:first").parent().attr('id');
var max_values = $(response).find("value:first").parent().attr('max_values');