2016-09-30 3 views
0

Сегодня было грубое ночное и утро хахаха. Я пытаюсь получить data с symfony2 от петиции AJAX'POST'.[OLVED. Ошибка при получении данных от POST ajax петиции Symfony2

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

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

пример: ["1", "3", "2"]. Таким образом, объект с id = 1 в db будет находиться в позиции 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()); 
    } 

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

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

EDIT: ошибка в строках

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

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

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

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

+0

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

+0

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

ответ

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 ключа в запросе, но на самом деле вы не отправите его

+0

в любом случае, я исправил его, но у меня все еще есть ошибка в контроллере .. эта строка: $ socialSorted = $ request-> request-> получить ('socialSorted'); не дает мне данных ... потому что я печатаю его и его null:/Знаете ли вы, почему? –

-1

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

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

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

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

+0

Удивительно, почему проблема вниз ... – renov8

Смежные вопросы