Как я могу напечатать массив из контроллера во время процесса ajax? - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь отладить мой AJAX звонок в базу данных.

Но нет никакого способа увидеть данные, которые я использую. Я попытался сделать это, вставив Javascript:

Я также попытался использовать print_r, но ничего не происходит.

Есть ли способ увидеть мои переменные? Например, инструмент разработчика или любая другая команда, которую я мог бы использовать.

Спасибо за вашу помощь.

function console_log( $data ){
    echo '<script>';
    echo 'console.log('. json_encode( $data ) .')';
    echo '</script>';
}

Это код моего контроллера:

public function searchEvents(){
        $request = Request::createFromGlobals();
        if($request->getMethod()=='POST') {
            $value = $request->request->get('searchBox');
            $em=$this->getDoctrine()->getManager();
            $searchFor = $request->request->get('value');
            $qb = $em->createQueryBuilder();
            //$eventos = $em->getRepository('App:Evento')->findBy(array('title'=>'Invi Chuwi'));
            $query = $em->createQuery('SELECT e FROM App:Evento e WHERE e.title LIKE :value');
            $query->setParameter('value', '%'.$searchFor.'%');
            $eventos = $query->getResult();
            /*$qb->select('u')
                ->from('App:Evento','u')
                ->where(('u.title = '.$searchFor));
            $query = $qb->getQuery();
            $eventos = $query->getResult();*/
            $response = [];
            foreach($eventos as $evento){
                array_unshift($response,[
                    $evento->getTitle(),
                    $evento->getFecha()
                ]);
                print_r($response);
            }
            $respuesta = new JsonResponse();
            $respuesta->setData(
                array('response'=>'success',
                    'eventos'=>$response)
            );
        }
        return $respuesta;
}

И мой js код:

function searchForEvents(value){
    $.ajax({
        method:"POST",
        data: value=2,
        url:"{{ path('searchEvents') }}",
        dataType:'json',
        success: function(data){
            //var results = JSON.parse(data.events);
            alert(JSON.stringify(data, null, 4));
            //putEvents(results);
        }
    })
}

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

Я предполагаю, что вы используете Symfony 4+. Если в этом случае вам нужно установить Symfony пакеты Profiler и Var Dumper (https://symfony.com/doc/current/profiler.html - https://symfony.com/doc/current/components/var_dumper.html). При установке этих двух комплектов вам необходимо изменить функции print_r на функцию dump. После того, как вы сделаете этот пакет профилировщика, запишите все ваши запросы. Вы можете получить доступ к данным профилировщика по маршруту "_profiler" (пример: http://localhost: 8000 / _profiler / или что-то подобное).

Обратите внимание, что браузер покажет вам прямую ссылку для профилирования внутри заголовков запроса, вот пример: enter image description here

0 голосов
/ 20 февраля 2020

Способ отправки запроса AJAX недействителен. Измените его на:

function searchForEvents(value){
    $.ajax({
        method:"POST",
        data: {value: 2},
        url:"{{ path('searchEvents') }}",
        dataType:'json',
        success: function(data){
            //var results = JSON.parse(data.events);
            alert(JSON.stringify(data, null, 4));
            //putEvents(results);
        }
    })
}

Это все равно не пройдет searchbox, но, надеюсь, этого достаточно, чтобы это выяснить. Если нет, то, пожалуйста, добавьте больше деталей.

Что касается отладки данных, вы всегда можете использовать старый добрый echo var_dump и посмотреть, что он вставляет в ваш ответ на запрос, на вкладке сети инструментов dev или вы можете сделать это Symfony, записав в файл.

0 голосов
/ 20 февраля 2020

Не уверен, правильно ли я понимаю ваш вопрос, но AJAX запросы нужно отлаживать отдельно, используя symfony панель инструментов разработчика или просматривая запрос в инструментах разработчика браузеров → вкладка Сеть. Вы также можете проверить var / log / dev.log

...