Отправка данных на контроллер Symfony2 с помощью Ajax Post

#php #ajax #symfony

#php #ajax #symfony

Вопрос:

Если кто-то воспроизводит видео на YouTube, я хочу отправить эту информацию на контроллер Symfony. Но почему-то контроллер ничего не получает.

Сообщение Ajax

  // Check if video is playing (works)
  var myPlayerState;
  function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.PLAYING) {
        alert('playing');

         $.ajax({
              url: "{{ path('dbe_user_add_experience') }}",
              type: "POST",
              data: { "data" : 'test' },
              success: function(data) { 
                 alert (data);
              },
              error: function(XMLHttpRequest, textStatus, errorThrown)
              {
                alert('Error: '    errorThrown);
              }
           });
    }
    myPlayerState = event.data;
  }
  

Маршрутизация

 <route id="dbe_user_add_experience" pattern="/getexperience">
    <default key="_controller">FOSUserBundle:Level:getExperience</default>
</route>
  

Контроллер

   public function getExperienceAction(){
        $request = $this->container->get('request');
        $data = $request->request->get('data');
        var_dump($data);
        die;


        $url = $this->container->get('router')->generate('fos_user_profile_show');
        $response = new RedirectResponse($url);
        return $response;

        //$this->addExperience(5);
  }
  

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

1. Одна вещь заключается в том, что вы используете POST / ->request , а затем проверяете GET / ->query часть запроса.

2. хорошо, я это исправил. но я думаю, что каким-то образом он вообще не отправляет информацию. Я проверил с помощью firebug> Networkanalysis, и после щелчка не отображается метод POST.

3. Эй, он отправляет данные в формате Json?

Ответ №1:

Вместо

 $data = $request->query->get('data');
  

Используйте

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

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

1. Хорошо, я исправил эту часть. Но почему-то я все еще не вижу метода POST в сетевом анализе firebug.

2. вы получаете какие-либо ошибки javascript? alert выполняется? правильно ли URL анализируется twig?

3. Да, предупреждение выполнено. Как я могу проверить, правильно ли проанализирован URL-адрес? Я не уверен, выполняется ли ajax post вообще? Я получаю одно сообщение об ошибке в консоли: TypeError: $ не определено

4. Попробуйте использовать getexperience путь, жестко заданный вместо path expression или проверьте код javascript на стороне вашего браузера, проверьте источник javascript, правильно ли задан URL

5. Если у вас значение $ не определено, это означает, что у вас не загружен jQuery, что означает, что ваш ajax-вызов не может быть выполнен

Ответ №2:

Вы используете неправильное свойство для получения POST-данных.

Для получения данных GET :

 $request->query->get('data');
  

Для получения POST-данных :

 $request->request->get('data');
  

Из http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/Request.html

Ответ №3:

Я обнаружил ошибку: Ajax был в режиме noconflict. Это означает, что мне пришлось изменить $.ajax({ на jQuery.ajax({ .