Загрузка данных в ветку из контроллера с помощью AJAX в Symfony 3.4 - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь загрузить данные в веточку с контроллера, используя AJAX, это действие моего контроллера:

    public function ajaxAction(Request $request) {
        $students = $this->getDoctrine()
            ->getRepository('techeventBundle:event')
            ->findAll();
        if ($request->isXmlHttpRequest() || $request->query->get('showJson') == 1) {
       echo "request successfull";
            $jsonData = array();
            $idx = 0;
            foreach($students as $student) {
                $temp = array(
                    'name' => $student->getTitre(),
                    'address' => $student->getDescription(),
                );
                $jsonData[$idx++] = $temp;
            }
            return new JsonResponse($jsonData);
        } else {
            return $this->render('@reservation/Default/ajax.html.twig');
        }
    }

это мой файл ветки:

    <!--  test Ajax --->
    <button id="loadstudent">load events</button>
    <div id="student">
        <div id="name"></div>
        <div id="address"></div>
    </div>
    <!--  test Ajax --->
    <script language = "javascript"
            src = "https://code.jquery.com/jquery-2.2.4.min.js"></script>

    <script language = "javascript">
        $(document).ready(function(){
            $("#loadstudent").on("click", function(event){
                $.ajax({
                    url:        '/student/ajax',
                    type:       'POST',
                    dataType:   'json',
                    async:      true,

                    success: function(data, status) {
                        var e = $('<tr><th>Name</th><th>Address</th></tr>');
                        $('#student').html('');
                        $('#student').append(e);

                        for(i = 0; i < data.length; i++) {
                            student = data[i];
                            var e = $('<tr><td id = "name"></td><td id = "address"></td></tr>');

                            $('#name', e).html(student['name']);
                            $('#address', e).html(student['address']);
                            $('#student').append(e);
                            alert('Ajax request success');

                        }
                    },
                    error : function(xhr, textStatus, errorThrown) {
                        alert('Ajax request failed.');
                    }
                });
            });
        });
    </script> 

позвольте мне описать вам проблему, когда я нажимаю на кнопку ("#loadstudent"), она отображает предупреждение "Ошибка Ajax-запроса", добавленное к этому, если вы видели в моем коде действия, я добавил echo " запрос выполнен "; после этого:

        if ($request->isXmlHttpRequest() || $request->query->get('showJson') == 1) {

это не отображает это, что означает, что оно не попадает в состояние! помогите пожалуйста я застрял в этой проблеме с одной недели,

1 Ответ

0 голосов
/ 29 марта 2019

Добавить название маршрута в контроллер @Route("/student/ajax", name="get-students")

Пример:

 /**
 * @Route("/student/ajax", name="get-students")
 */
  public function ajaxAction(Request $request) {          
    if ($request->isXmlHttpRequest() || $request->query->get('showJson') == 1) { 
        $jsonData = array(
            array(
                'name' => 'name1',
                'address' => 'addres1',
            ),
              array(
                'name' => 'name2',
                'address' => 'addres2',
            ),
        );

        return new JsonResponse($jsonData);
    } else {
        return $this->render('@reservation/Default/ajax.html.twig');
    }
}

Теперь, в $.ajax отправьте запрос на имя маршрута url: "{{ path('get-students') }}"

 <script language = "javascript">
        $(document).ready(function () {
            $("#loadstudent").on("click", function (event) {
                $.ajax({
                    url: "{{ path('get-students') }}",
                    type: 'POST',
                    dataType: 'json',
                    async: true,

                    success: function (data, status) {
                        var e = $('<tr><th>Name</th><th>Address</th></tr>');
                        $('#student').html('');
                        $('#student').append(e);

                        for (i = 0; i < data.length; i++) {
                            student = data[i];
                            var e = $('<tr><td id = "name"></td><td id = "address"></td></tr>');

                            $('#name', e).html(student['name']);
                            $('#address', e).html(student['address']);
                            $('#student').append(e);
                            alert('Ajax request success');

                        }
                    },
                    error: function (xhr, textStatus, errorThrown) {
                        console.log(xhr, textStatus, errorThrown);
                        alert('Ajax request failed.');
                    }
                });
            });
        });
    </script> 

Вывод файла ветки:

Name    Address
name1   addres1
name2   addres2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...