【问题标题】:Symfony JsonResponse: Fetching each element of multidimensional array returned by symfony controllerSymfony JsonResponse:获取 symfony 控制器返回的多维数组的每个元素
【发布时间】:2016-05-09 11:41:58
【问题描述】:

基本上我想做的是在我尝试获取表的所有行时尝试从 symfony 控制器传递的“数组”数组中获取每个元素。我的控制器工作得很好,并给了我输出:

[{"id":1,"name":"johnsonn's 婴儿洗发水","dsc":"shampoo","pic":"572f8a02d59b3.jpg","company":4,"type":"婴儿用品","price":150,"sold":null,"stock":200},{"id":2,"name":"johnson's soap","dsc":"婴儿肥皂","pic ":"57303fc35f72c.jpg","company":4,"type":"婴儿用品","price":52,"sold":null,"stock":1000}]

我用于获取此输出的 javascript 如下:

<script>
    function fetchprod() {
        $.ajax({
            url: "/show/prod",
            dataType: "json"
        }).success(function(data){
            $('#container').html(JSON.stringify(data));
        });
    }
    fetchprod();
    setInterval(function () {fetchprod()}, 3000);
</script>

我想要做的是分别获取每个数组的每个元素,以便我可以从中创建一个 div,以便它们可以正确排列在网格中。

数组也被 symfony 控制器获取(如果你需要额外的信息):

public function showAction($slug){
    $em = $this->getDoctrine()->getManager();
    if($slug == 'prod'){
        $repo = $em->getRepository('SystemBundle:Products');
        $q = $repo->createQueryBuilder('u')
            ->getQuery()
            ->getArrayResult();
        return new JsonResponse($q);
    }

}

【问题讨论】:

  • 一些注意事项:它是一个对象数组。 Symfony 中的 showAction 必须返回响应,即使 $slug 的值不是 'prod'。在 if 子句之后返回异常或适当的内容。

标签: php jquery arrays json symfony


【解决方案1】:

由于您使用的是 jQuery,也许您可​​以使用 each 方法:

// ajax call
.success( function (data) {
    $.each(data, function(key, value) {
        var div = '<div>' + JSON.stringify(value) + '</div>';
        $('#container').append(div);
    });
});
// close function

通过这种方式,您可以遍历数组中的每个对象,将其放在一个 div 中,然后将其附加到 #container

它应该创建如下内容:

<div id="container">
    <div>{"id":1,"name":"johnsonn's baby shampoo","dsc":"shampoo","pic":"572f8a02d59b3.jpg","company":4,"type":"baby products","price":150,"sold":null,"stock":200}</div>
    <div>{"id":2,"name":"johnson's soap","dsc":"baby soap","pic":"57303fc35f72c.jpg","company":4,"type":"baby products","price":52,"sold":null,"stock":1000}</div>
</div>

【讨论】:

  • 它成功了,非常感谢,还有一个疑问,一切都很完美,但是当函数被调用时每 3 秒,相同的元素会不断地一次又一次地添加自己(由于追加)......如何防止这种情况,(我将 append 替换为 .html() 但只粘贴 1 个值)
  • 找到了,每次调用函数时我都会清空容器,非常感谢,对我很有用! :)
猜你喜欢
  • 2019-01-07
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
相关资源
最近更新 更多