Конвертировать массив с объектами в него в Json - PullRequest
0 голосов
/ 20 сентября 2019

На самом деле я работаю с Symfony 2.8, и я пытаюсь использовать AJAX для получения информации об указанном идентификаторе.
Вот как я использую Ajax в моем html.twig:

$.ajax({
        url: '{{ (path('questionsByAudit')) }}',
        type: "POST",
        dataType: "json",
        data: {
         "idAudit": $(this).attr('data-id')
        },
        async: true,
        success: function (data)
        {
         console.log(data);
         alert(data);
        }
      });

Это мой URL в моем routing.yml:

questionsByAudit: 
    path: /QuestionsByAudit
    defaults: { _controller: FSABundle:FsaPlan/FsaPlanByAuditor:getQuestions }

И это функция в контроллере:

public function getQuestionsAction(Request $request )
    {
        $em = $this->getDoctrine()->getEntityManager();



        if($request->request->get('idAudit')){

            $idAudit = $request->request->get('idAudit');

            $Audit = $em->getRepository('FSABundle:FsaAudits')
                    ->findBy(array('idAudit'=>$idAudit));

            return new JsonResponse($Audit);
        }
    }

Проблемаследующая функция возвращает это:
$Audit Result
И вот что я получаю, когда печатаю результат в предупреждении:
Result of the Ajax printed in an alert


Вот то, что я получаю в console.log:
Result in console.log

ПРИМЕЧАНИЕ: I 'мы читали, что способ вернуть информацию контроллера в вызов ajax должен быть в виде JSON, но я думаю, что то, что я получаю в $ Audit, это массив с объектами внутри, я не знаю, как вернуть эту информацию вАякс правильно.
Любая идея или предложение, как я могу получить это?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Одним из простых подходов было бы реализовать JsonSerializable на объектах, которые вы хотите закодировать

class FsaAudits implements \JsonSerializable {

   // ... all other content

   public function jsonSerialize() {
       return (array)$this; // this might only contain an empty array
   }
}

однако, лучше фактически контролировать то, что выводится (не хочудействительно внутренние данные для утечки):

public function jsonSerialize() {
    return [
        'idAudit' => $this->idAudit,
        //...
    ];
}

другим способом было бы использование компонента Symfony Serializer.

0 голосов
/ 20 сентября 2019

In Функция контроллера возвращает ответ Json.

use Symfony\Component\HttpFoundation\Response;

        $result['success'] = "1";   
        $result['data'] = $data;   
        $result['message'] = "Successfully Update"; 

        $response = new Response(json_encode($result));
        return $response;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...