我的代码中的奥秘

A Mystery in my Code

本文关键字:奥秘 代码 我的      更新时间:2023-09-26

我已经修复了typo3上的ajax问题。现在又来了一个问题。这个时间与将操作中找到的对象返回到 Javascript 有关。所以我告诉你我到底做了什么。

这是第一个我的 Ajax 调用函数:

function getContent(id)
      {
        console.log("Starting process ...");
          $.ajax({
                   async: 'true',
                   url: 'index.php',
                   type: 'POST',
                   data: {
                       eID: "ajaxDispatcher",
                       request: {
                           pluginName:  'listapp',
                           controller:  'Pays',
                           action:      'getMyCompanys',
                           arguments: {
                               'id': id
                                      }
                               }
                   },
                   dataType: "json",
                   success: function(result) {
                      var data = JSON.parse(result)
                      console.log(data.nom);
                   },
                   error: function(error) {
                      console.log(error);
                   }
               });
      }

这是"getMyCompanys"操作:

public function getMyCompanysAction()
    {
        $argument = $this->request->getArguments('id');
        $company  =  $this->entrepriseRepository->findBypays(2); // just to test with the id 2
        $result = (array) $company;
        return json_encode($result);
    }

现在在控制台上,我得到以下输出:

{"'u0000*'u0000dataMapper":{},"'u0000*'u0000persistenceManager":{},"'u0000*'u0000query":{},"'u0000*'u0000queryResult":null}

所以乍一看,我以为对象没有传递给javascript,但是当我尝试向对象添加一个属性时$company($company->att = 'val';)

我得到这个输出:

{"'u0000*'u0000dataMapper":{},"'u0000*'u0000persistenceManager":{},"'u0000*'u0000query":{},"'u0000*'u0000queryResult":null**,"att":"val"}**

请注意,显示添加的属性及其值

所以我现在确信这个对象有问题。我也 100% 确定该方法找到Bypays(2);正在工作,我在列表中尝试了它。

我真的不知道可能是什么问题:/

仅供您参考:这是我使用 JBuilder 自己开发的 typo3 扩展的一部分

经过长时间的挣扎,我尝试了一个技巧,它奏效了,它证明了我json_encode不会返回 typo3 中的对象,即使我应用了:

$object->toArray() or (array) $object 

到对象,所以我的解决方案是:

$companies = array();
foreach ($this->adresseRepository->findByland($id) as $company)
        {
            $companies[] = array(
                'uid'       => $company->getUid(),
                'firma'     => $company->getFirma(),
                'strasse'   => $company->getStrasse(),
                'plz'       => $company->getPlz(),
                'ort'       => $company->getOrt(),
                'land'      => $company->getLand(),
                'telefon'   => $company->getTelefon(),
                'email'     => $company->getEmail(),
                'webseite'  => $company->getWebseite()
            );
        }
return json_encode($companies);

它奏效;)