[OLVED. Ошибка получения данных из петиции после ajax Symfony2

#javascript #php #jquery #ajax #symfony

#javascript #php #jquery #ajax #symfony

Вопрос:

Сегодня была тяжелая ночь и утро, хахаха. Я пытаюсь получить некоторые data symfony2 из AJAX 'POST' петиции.

На самом деле я хочу отправить массив и получить его в контроллере, но я получаю сообщение об ошибке, подобное этой переменной null . Я думаю, что я пытаюсь сделать это правильно, но… Давайте посмотрим!

Это петиция JS AJAX, я получаю запрос ul#sortable.children(), чтобы обновить его в базе данных, поэтому я отправил массив с позицией и идентификатором.

пример: [«1», «3», «2»]. Таким образом, объект с id = 1 в БД будет находиться в позиции 1. Элемент с id = 3 будет находиться в позиции 2, а элемент с id = 2 будет находиться в позиции 3.

 $('#ordenar').click(function(){
            var $children = $('#sortable').children();
            var numElementos = $children.length;
            var socialSorted = [];

            for(var i=0; i<numElementos; i  ){
                socialSorted.push($children[i].id);
            }

            $.ajax({
                url: ' {{ path('admin_update_social_position') }} ',
                datos: socialSorted,
                method: 'POST'
            }).done(function (data) {
                if(data.type == 'OK'){
                    window.location.reload();
                }
                if(data.type == 'ERROR'){
                    $('#error-message').slideDown();
                }
            });
        });
  

А вот и контроллер

 /**
     * @Route("/admin/update/order/social", name="admin_update_social_position")
     */
    public function orderSocial(Request $request)
    {
        $em             = $this->getDoctrine()->getManager();

        $socialSorted   = $request->request->get('socialSorted');
        $numElementos   = count($socialSorted);

        for($i=0; $i<$numElementos; $i  )
        {
            $social = $em->getRepository('AppBundle:Social')->findById($socialSorted[$i]);
            $social->setPosition($i 1);
            $em->persist($social);
        }

        if (empty($socialSorted)) {
            $this->sendResponseStatus('ERROR');

            return new JSONResponse($this->getData());
        }

        $em->flush();

        $this->sendResponseStatus('OK');

        // Generamos los datos para la respuesta ajax
        return new JSONResponse($this->getData());
    }
  

Я пробовал много способов… отправка массива, отправка a JSON с массивом в, а также различные способы получения данных из controller … любой совет / решение?

Спасибо всем вам

РЕДАКТИРОВАТЬ: ошибка была в строках

 $social = $em->getRepository('AppBundle:Social')->findById($socialSorted[$i]);
            $social->setPosition($i 1);
            $em->persist($social);
  

Потому что после findBy он возвращает вас и ArrayCollection, а затем я должен сделать:

 $social = $em->getRepository('AppBundle:Social')->findById($socialSorted[$i]);
                $social[0]->setPosition($i 1);
                $em->persist($social[0]);
  

Комментарии:

1. datos: socialSorted, … datos? … Разве это не должно быть data: socialSorted, ? Тот факт, что вы получаете null , указывает на то, что параметр отправляется неправильно. Symfonys request->get() возвращает null , если параметр не существует.

2. Извините, поправьте меня, если я ошибаюсь. В ajax вы написали datos вместо data , а также отправляете данные с ключевым именем. Вот так data: { 'socialSorted' : socialSorted},

3. Согласен! Да! Какая огромная ошибка.. хахах спасибо всем! Сейчас я получаю внутреннюю ошибку, но я посмотрю на контроллер!! @KinshukLahiri

4. @KinshukLahiri в любом случае, я исправил это, но у меня все еще есть ошибка в контроллере.. эта строка: $socialSorted = $request-> request-> get(‘socialSorted’); не дает мне данные … потому что я печатаю его и его значение null:/ Вы знаете, почему?

5. @VictorRiberoGuasch У вас есть какие-либо данные?

Ответ №1:

Попробуйте это:

         $.ajax({
            url: ' {{ path('admin_update_social_position') }} ',
            data: {
                socialSorted: socialSorted,
            },
            method: 'POST'
        }).done(function (data) {
            if(data.type == 'OK'){
                window.location.reload();
            }
            if(data.type == 'ERROR'){
                $('#error-message').slideDown();
            }
        });
  

Вам необходимо отправить данные в виде массива. Вы запрашиваете socialSorted ключ в запросе, но на самом деле вы его не отправляете

Комментарии:

1. в любом случае, я исправил это, но у меня все еще есть ошибка в контроллере.. эта строка: $socialSorted = $request-> request-> get(‘socialSorted’); не дает мне данные … потому что я печатаю его и его значение null:/ Вы знаете, почему?

Ответ №2:

Проблема здесь заключается в том, что вы ожидаете socialSorted переменную от AJAX, но никогда не получаете ее:

В контроллере: $socialSorted = $request->get('socialSorted');

Но в вызове AJAX.. datos: socialSorted,

В вашем контроллере просто сделайте его прочитанным… $socialSorted = $request->get('datos'); или измените вызов AJAX на socialSorted: socialSorted