无法访问symfony控制器内的javascript变量
在我的symfony(v3.4)项目中,我需要将一些javascript变量从我的视图传递到我的控制器,其中包含一个表单:我使用Jquery和Ajax将变量发送到正确的路径,但由于某些原因,我无法从控制器访问它 以下是my twig视图中的脚本部分:无法访问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')}”; $.
$(“.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请求添加jsurl
。理想情况下,安装和修改为:
url: Routing.generate('av_platform_saisie')
您是否检查了表单的源代码,action
属性的值是多少?我认为您不能像以前那样为AJAX请求添加jsurl
。理想情况下,安装和修改为:
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请求,效果很好。我不明白你所说的“我不能从我的控制器访问它”是什么意思。基本上,我想获取通过Ajaxphp$month=$request->get('month')发送的js变量$年份=$request->get('year')代码>您是否检查了浏览器开发工具中的“网络”选项卡?您是说Twig没有正确地替换{{path('av_platform_saisie')}}吗?不,路径是正确的。我从另一个视图尝试了相同的Ajax请求,效果很好。我不明白你所说的“我不能从我的控制器访问它”是什么意思。基本上,我想获取通过Ajaxphp$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选项中,但没有什么新的内容,我的