2

URL から次の xml が返されます。

<?xml version="1.0"?>
<categories>
  <category>
    <catid>17</catid>
    <name>Collage</name>
    <parent></parent>
  </category>
  <category>
    <catid>15</catid>
    <name>Letter Mats</name>
    <parent></parent>
  </category>
  <category>
    <catid>182</catid>
    <name>Single Opening</name>
    <parent></parent>
  </category>
</categories>

そして私のjavascriptコード、私は持っています:

var matte_select_options = new Array();
function matte_designs_populate_types()
{
  $(document).ready(function()
  {
    $.ajax({
      type: "GET",
      url: "myurl/system/components/catsxml/3",
      dataType: 'xml',
      success: function(xml) {
        designs = xml.getElementsByTagName("categories")[0].childNodes;
        var output = [];
        alert(designs.length);
        for (i = 0; i < designs.length; i++)
        {
          var catid = designs[i].getAttribute("catid");
          var name = designs[i].getAttribute("name");
          output.push('<option value="'+ catid +'">'+ name +'</option>');
          matte_select_options[catid] = name;
        }

        $('#matte_designs').html(output.join(''));
      }
    });
  });
}

何らかの理由で、アラートで 7 が表示されますが、その理由がわかりません。ただし、主な問題は、catid と name が設定されていないため、select が読み込まれないことです。

4

2 に答える 2

3

返された XML を jQuery オブジェクトに変換し、通常どおり jQuery の DOM トラバーサル関数を使用できます。これを試して:

success: function(xml) {
    var output = [];
    $('category', xml).each(function(i, el) {
        var catid = $("catid", this).text();
        var name = $("name", this).text();
        output.push($('<option />', { value: catid, text: name }));
        matte_select_options[catid] = name;
    });
    $('#matte_designs').html(output);
}

フィドルの例

于 2013-11-08T14:47:12.647 に答える
1

あなたのxmlの例では:属性catidnameはありません。それらはノードであり、情報はそのコンテンツに含まれています。

を使用している場合は、セレクターとマニピュレーターjQueryを使用して xml を解析できるはずです。jQuery

success: function(xml) {
    var designs = $(xml).find('category');
    var output = [];

    designs.each(function(){
        var catid = $(this).find('catid').text();
        var name = $(this).find('name').text();
        output.push('<option value="'+ catid +'">'+ name +'</option>');
        matte_select_options[catid] = name;
    });

    $('#matte_designs').html(output.join(''));
  }
于 2013-11-08T14:48:46.670 に答える