Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法访问symfony控制器内的javascript变量_Javascript_Php_Jquery_Ajax_Symfony - Fatal编程技术网

无法访问symfony控制器内的javascript变量

无法访问symfony控制器内的javascript变量,javascript,php,jquery,ajax,symfony,Javascript,Php,Jquery,Ajax,Symfony,在我的symfony(v3.4)项目中,我需要将一些javascript变量从我的视图传递到我的控制器,其中包含一个表单:我使用Jquery和Ajax将变量发送到正确的路径,但由于某些原因,我无法从控制器访问它 以下是my twig视图中的脚本部分: $(“.month”)。单击(函数(){ var click=$(这个); var month=click.val(); 风险值年份=$(“#年”).val(); var url=“{path('av_platform_saisie')}”; $.

在我的symfony(v3.4)项目中,我需要将一些javascript变量从我的视图传递到我的控制器,其中包含一个表单:我使用Jquery和Ajax将变量发送到正确的路径,但由于某些原因,我无法从控制器访问它

以下是my twig视图中的脚本部分:

$(“.month”)。单击(函数(){
var click=$(这个);
var month=click.val();
风险值年份=$(“#年”).val();
var url=“{path('av_platform_saisie')}”;
$.ajax(url{
键入:“POST”,
数据:{
“月”:月,
“年”:年
},
成功:功能(数据){
警报(“正常”);
},
错误:函数(jqXHR,textStatus,errorshown){}
});
});
和我的控制器:

公共功能saisieAction(请求$Request)
{
$user=$this->getUser();
$thisyear=日期(“Y”);
$em=$this->getDoctrine()->getManager();
//创建表单
$form=$this->get('form.factory')->createBuilder(FormType::class)
->添加('ndf',CollectionType::类,数组(
'entry_type'=>notedFraisType::class,
'label'=>false,
“允许添加”=>true,
“允许删除”=>true,
))
->getForm();
//如果表格已经提交
如果($request->isMethod('POST')&&&$form->handleRequest($request)->isValid()){
如果($request->isXMLHttpRequest()){
$month=$request->get('month');
$year=$request->get('year');
$sub_date=$month.'/'.$year;
}
$notesDeFrais=$form['ndf']->getData();
外汇($notesDeFrais为$ndf){
$ndf->setUser($user);
$ndf->setMonth($sub_日期);
$em->persist($ndf);
}
$em->flush();
}
返回$this->render('AvPlatformBundle:Platform:saisie.html.twig',
排列(
'year'=>thiswear$form'=>form->createView()
));
}
奇怪的是:我试图从一个新的Twig视图发送我的js变量,该视图不是由我的控制器呈现的,并且它在完全相同的代码中工作正常,所以这可能是一种正常的行为

编辑:
我做了一些调试,实际上,如果($request->isXMLHttpRequest())没有执行,那么我的
中的代码应该是这样的:

if($request->isXMLHttpRequest()) {
    $month=$request->request->get('month');
    $year=$request->request->get('year');
    $sub_date=$month .'/' .$year;
}
如果您想获取
get
参数,则如下所示:

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

您没有使用正确的语法获取参数,应该是这样的:

if($request->isXMLHttpRequest()) {
    $month=$request->request->get('month');
    $year=$request->request->get('year');
    $sub_date=$month .'/' .$year;
}
如果您想获取
get
参数,则如下所示:

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

您必须正确获取请求的内容

根据您的Symfony版本,其他答案可能不起作用,您可能必须使用:

$request->getContent()

以访问包含数据的关联数组


(编辑以添加我的注释):如果它不起作用,我脑海中唯一的另一件事就是IDE自动导入会在控制器中导入错误的“请求”类?确保使用-->使用Symfony\Component\HttpFoundation\Request

您必须正确获取请求的内容

根据您的Symfony版本,其他答案可能不起作用,您可能必须使用:

$request->getContent()

以访问包含数据的关联数组


(编辑以添加我的注释):如果它不起作用,我脑海中唯一的另一件事就是IDE自动导入会在控制器中导入错误的“请求”类?确保使用-->使用Symfony\Component\HttpFoundation\Request

您是否检查了表单的源代码,
action
属性的值是多少?我认为您不能像以前那样为AJAX请求添加js
url
。理想情况下,安装和修改为:

url: Routing.generate('av_platform_saisie')

您是否检查了表单的源代码,
action
属性的值是多少?我认为您不能像以前那样为AJAX请求添加js
url
。理想情况下,安装和修改为:

url: Routing.generate('av_platform_saisie')

将url放入传递给ajax的数组中,如下所示:

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

     $.ajax({
         url: "{{ path('av_platform_saisie') }}",
         type: 'POST',
         data: { 'month': month, 
                 'year': year
               },
         success: function (data) {
             alert('OK');
         },
         error : function(jqXHR, textStatus, errorThrown){}
     });
});

将url放入传递给ajax的数组中,如下所示:

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

     $.ajax({
         url: "{{ path('av_platform_saisie') }}",
         type: 'POST',
         data: { 'month': month, 
                 'year': year
               },
         success: function (data) {
             alert('OK');
         },
         error : function(jqXHR, textStatus, errorThrown){}
     });
});


你是说Twig没有正确地替换{{path('av_platform_saisie')}}吗?不,路径是正确的。我从另一个视图尝试了相同的Ajax请求,效果很好。我不明白你所说的“我不能从我的控制器访问它”是什么意思。基本上,我想获取通过Ajax
php$month=$request->get('month')发送的js变量$年份=$request->get('year')您是否检查了浏览器开发工具中的“网络”选项卡?您是说Twig没有正确地替换{{path('av_platform_saisie')}}吗?不,路径是正确的。我从另一个视图尝试了相同的Ajax请求,效果很好。我不明白你所说的“我不能从我的控制器访问它”是什么意思。基本上,我想获取通过Ajax
php$month=$request->get('month')发送的js变量$年份=$request->get('year')你检查了浏览器开发工具中的网络选项卡了吗?我已经测试了
php$request->request->get('parameter')
语法,但它也不起作用。正如我在最初的帖子中所说的,同样的代码正在我的javascript中处理一个不是由我的控制器呈现的视图,我无法理解为什么要导入正确的请求类。我将尝试了解getContent()方法是如何工作的,谢谢您的支持help@AliT我上面写的是获取POST参数的正确方法。如果它不起作用,就意味着问题在别处。正如ehymel所说,您应该将
url
移动到ajax选项中。这是最常见的。您使用的是哪个Symfony版本?了解这一点很有帮助。您应该编辑您的问题,并说明您使用的是哪个版本的Symfony。我将url移到了ajax选项中,但没有什么新的内容,我的