Проблема в моем контроллере с переменными JS - PullRequest
0 голосов
/ 08 июня 2019

В моем проекте Symfony (v3.4) мне нужно передать некоторые переменные javascript из моего представления в мой контроллер: я использую Jquery и Ajax для отправки моей переменной в контроллер, но у меня нет доступа к моим переменным.У меня нет проблем с моим Ajax-запросом, я проверил его через профилировщик Symfony, и запрос был отправлен правильно, но по какой-то причине контроллер не может даже обнаружить Ajax-запрос.

Вот мой контроллер:

public function saisieAction(Request $request)
    {

        $user = $this->getUser();
        $thisyear = date("Y");

        $em = $this->getDoctrine()->getManager();

        // Create the form
        $form = $this->get('form.factory')->createBuilder(FormType::class)
            ->add('ndf', CollectionType::class, array(
                'entry_type' => NoteDeFraisType::class,
                'label' => false,
                'allow_add' => true,
                'allow_delete' => true,
            ))
            ->getForm();


        // if the form has been submited
        if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {

            if($request->isXMLHttpRequest()){
                //After some code debuging, this is never 
                //executed
                $month = $request->get('month');
                $year = $request->get('year');
                $sub_date = $month .'/' .$year;

            }

            $notesDeFrais = $form['ndf']->getData();


            foreach ($notesDeFrais as $ndf) {
                $ndf->setUser($user);
                $ndf->setMonth($sub_date);
                $em->persist($ndf);
            }

            $em->flush();


        }


        return $this->render('AvPlatformBundle:Platform:saisie.html.twig',
            array(
                'year' => $thisyear,  'form' => $form->createView()
            ));
    }

И сценарий в моем представлении saisie.html.twig:

$(".month").click(function() {


     var click = $(this);

     var month = click.val();
     var year = $("#years").val();

      $.post("{{ path('avaliance_platform_saisie') }}",
            { 'month' : month,
              'year' : year
            },

            function (data,status) {
                alert('Data sent');

            });
            

        });

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Из исходного кода:

/**
 * Returns true if the request is a XMLHttpRequest.
 *
 * It works if your JavaScript library sets an X-Requested-With HTTP header.
 * It is known to work with common JavaScript frameworks:
 *
 * @see http://en.wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript
 *
 * @return bool true if the request is an XMLHttpRequest, false otherwise
 */
public function isXmlHttpRequest()
{
    return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}

Следовательно, проблема в том, что в запросе AJAX этот заголовок отсутствует. JQuery должен вставлять его автоматически, если нет причины исключать его. Одной из таких причин может быть междоменный запрос.

Возможно вставить заголовок вручную (но используйте его только для отладки):

  $.post("{{ path('avaliance_platform_saisie') }}",
        { 'month' : month,
          'year' : year
        },
        headers: {'X-Requested-With': 'XMLHttpRequest'},

        function (data,status) {
            alert('Data sent');

        });


    });
0 голосов
/ 08 июня 2019

Я не совсем понимаю, какой здесь язык сервера, но я думаю, что в вашем почтовом запросе вы отсутствуете. contentType (тип данных, которые вы отправляете на сервер) и dataType (тип данных, которые вы ожидаете от сервера)

contentType: "application / json; charset = utf-8", DATATYPE: "JSON",

Кроме того, проверьте, настроен ли ваш метод действия контроллера для получения данных HTTP после публикации.

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