0

テンプレートからAJAX経由で呼び出されるSymfony 2関数があります。これは機能です:

/**
 * Get subcategories based on $parent_id parameter
 *
 * @Route("/category/subcategories/{parent_id}", name="category_subcategories", options={"expose"=true})
 * @Method("GET")
 */
public function getCategories($parent_id = null) {
    $em = $this->getDoctrine()->getManager();
    $entities = $em->getRepository('CategoryBundle:Category')->findBy(array("parent" => $parent_id));

    $subcategories = array();
    foreach ($entities as $entity) {
        $subcategories[] = array($entity->getId() => $entity->getName());
    }

    $response = new JsonResponse();
    $response->setData($subcategories);

    return $response;
}

その関数は次のような JSON を返します。

[{"27":"Test10"},{"28":"Test11"},{"29":"Test12"}]

そこで、要素を解析して表示する次の jQuery 関数を作成しました。

$(function() {
    $("a.step").click(function() {
        var id = $(this).attr('data-id');
        $.ajax({
            type: 'GET',
            url: Routing.generate('category_subcategories', {parent_id: id}),
            dataType: "json",
            success: function(data) {
                if (data.length != 0) {
                    var LIs = "";
                    $.each(data[0], function(i, v) {
                        LIs += '<li><a class="step" data-id="' + i + '" href="#">' + v + '</a></li>';
                    });

                    $('#categories').html(LIs);
                }
            }
        });
    });
});

しかし、JSON 配列の最初の要素のみが表示されているため、機能していません。コードの何が問題なのですか? 何かアドバイス?

4

1 に答える 1

1
$.each(data[0], function(i, v) {
  LIs += '<li><a class="step" data-id="' + i + '" href="#">' + v + '</a></li>';
});

ここにdata[0]{"27":"Test10"}ありますが、あなたが望むのは ですdata

これを試して:

$.each(data, function(index, value) {
  $.each(value, function(i, v) {
    LIs += '<li><a class="step" data-id="' + v + '" href="#">' + v + '</a></li>';
  }
});
于 2013-08-08T02:30:07.717 に答える