1

现在我设法获得了随机 AJAX 输出,下一步我想从数据库中获取一些有用的值。

再一次,我的 AJAX 调用看起来像这样(另外,我添加了一个 JSON 调用,这样会更好)。

        
        $.ajax({
              url: "index.php",
              data: "tx_myext_myplugin1[controller]=Mycontroller1&tx_myext_myplugin1[action]=ajax&type=89657201",
              success: function(result) {
                alert(result);
              }
            });

    /*
    var uri = '<f:uri.action action="ajax" controller="Mycontroller1" pageType="89657201" />';

    jQuery.getJSON(uri, function(result) {
        alert(result.c);
    });
    */

        

我的 ajaxAction 函数:

        
        public function ajaxAction() {
        $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

        return json_encode($arr);
    }
        

这在我使用 JSON 调用时有效,但现在我需要获取一个包含数据库值的数组。我认为使用 findAll() 函数调用存储库已经有所帮助,但我认为它不是一个数组,这就是我不能使用它的原因。一个不同的想法是使用我在模型中编写的 getValue 方法,但我不确定这是否会有所帮助。

4

1 回答 1

2

免责声明: 通常使用 findAll() 方法可能是真实的performance killer,因此尝试编写自定义查找器,仅选择所需的属性,特别是如果您的模型很大或包含许多关系!

您已经足够接近了,因为您可以使用 json_encode() 发送 findAll() 结果,但请注意,根据您的模型,从 findAll 创建的 json 可能非常巨大。迭代结果并重写新数组只需要值是更好的主意。

    $dataFromRepo = $this->yourRepository->findAll();

    $resultArray = array();

    foreach ($dataFromRepo as $object){
        $resultArray[$object->getUid()] = $object->getTitle();
    }

    return json_encode($resultArray);

结果你会得到基本的 JSON object

{
    "1": "Title of first item",
    "2": "Second item",
    "3": "Et cetera"
}

何时删除自定义索引$resultArray

    foreach ($dataFromRepo as $object){
        $resultArray[] = $object->getTitle();
    }

你会得到 JSONarray

[
    "Title of first item",
    "Second item",
    "Et cetera"
]

等等。当然,您也可以通过这种方式构建multidimensional array并发送更复杂的对象来一次获得所有您需要的东西。

PS 尝试始终使用示例JsonLint - 在线验证器来验证您期望的输出是否有效。

于 2012-05-23T14:03:42.380 回答