如何将变量从javascript传递到symfony2控制器
我有一个模式,表格中有一些数据,每行旁边有一个单选按钮。每次单击该单选按钮时,单击按钮后,相应的数据将存储在一个数组中。现在,我在将变量从javascript传递到控制器(数组的第6个索引)时遇到了一个问题 根据我的研究,大多数解决方案都使用ajax。我已经尝试了所有可能的代码,我可以在我的控制器,但似乎它没有收到任何东西。我在ajax调用中发送的数据没有到达控制器。 这是我的小枝文件:如何将变量从javascript传递到symfony2控制器,javascript,php,jquery,symfony,Javascript,Php,Jquery,Symfony,我有一个模式,表格中有一些数据,每行旁边有一个单选按钮。每次单击该单选按钮时,单击按钮后,相应的数据将存储在一个数组中。现在,我在将变量从javascript传递到控制器(数组的第6个索引)时遇到了一个问题 根据我的研究,大多数解决方案都使用ajax。我已经尝试了所有可能的代码,我可以在我的控制器,但似乎它没有收到任何东西。我在ajax调用中发送的数据没有到达控制器。 这是我的小枝文件: <button type="button" id="selectrow" class="btn btn
<button type="button" id="selectrow" class="btn btn-primary pull-right btn-spacing">Select</button>
所选变量是我分别将所选数据存储在文件某处的位置。下面是我的控制器,我试图显示以下内容,但输出都为空
public function editAction(Request $request) {
if ($request->isXmlHttpRequest()) {
dump($request->getContent());
}
dump($request->request->get('data'));
dump($request->query->get('data'));
}
我真的很困惑,因为在点击按钮后,它会发出“OK”警报,但是,数据没有发送到控制器。有人能帮我吗?非常感谢,谢谢
这是我得到的输出:
这里的问题是刷新页面,这意味着调用控制器时根本没有任何
数据。在此之前,jQuery调用您的editAction
方法并等待一个永远不会出现的响应,因为您在控制器中没有返回任何异常的内容,因为您应该得到一个错误,说明控制器应该返回一个响应
因此,您需要如何确保控制器从jQuery
接收数据:
dump
和die
:
public function editAction(Request $request) {
if ($request->isXmlHttpRequest()) {
dump($request->getContent());
}
dump($request->request->get('data'));
dump($request->query->get('data'));
die(); // terminate the current script
}
在响应中返回数据
,并在jQuery
ssuccess
中处理它:
在控制器中:
return new JsonResponse($request->request->get('data'));
在jQuery
s success中:
$(document).ready(function () {
$('#selectrow').click(function () {
var dataSend = selected[6];
jQuery.ajax({
url: "project/edit/",
type: "GET",
data: { "data": dataSend },
success: function (data) {
console.log(data...);
if(data == dataSend) console.log("equivalent");
},
error: function (data) {
alert("fail");
}
});
});
我不知道数据变量是什么类型。如果它只是一个字符串或数字,您只需console.log(data)
,它就可以在浏览器控制台中输出值
请留下一个评论,如果这是有效的 这里的问题是刷新页面,这意味着调用控制器时根本没有任何数据。在此之前,jQuery调用您的editAction
方法并等待一个永远不会出现的响应,因为您在控制器中没有返回任何异常的内容,因为您应该得到一个错误,说明控制器应该返回一个响应
因此,您需要如何确保控制器从jQuery
接收数据:
dump
和die
:
public function editAction(Request $request) {
if ($request->isXmlHttpRequest()) {
dump($request->getContent());
}
dump($request->request->get('data'));
dump($request->query->get('data'));
die(); // terminate the current script
}
在响应中返回数据
,并在jQuery
ssuccess
中处理它:
在控制器中:
return new JsonResponse($request->request->get('data'));
在jQuery
s success中:
$(document).ready(function () {
$('#selectrow').click(function () {
var dataSend = selected[6];
jQuery.ajax({
url: "project/edit/",
type: "GET",
data: { "data": dataSend },
success: function (data) {
console.log(data...);
if(data == dataSend) console.log("equivalent");
},
error: function (data) {
alert("fail");
}
});
});
我不知道数据变量是什么类型。如果它只是一个字符串或数字,您只需console.log(data)
,它就可以在浏览器控制台中输出值
请留下一个评论,如果这是有效的 您可以向我们展示整个表单以及从PHP获得的输出吗?它只显示null。请尝试将数据类型:“application/json”
添加到ajax调用中。输出仍然相同:null。另外,我真的很想知道为什么刷新页面后会显示输出。它不是只有在点击按钮后才会显示吗?这是一个ajax调用我不知道dump
和ajax是如何工作的,但我猜它不是这样工作的。因此,我将返回控制器中的数据,并使用console.log(…)
内部success:function(data){
。我猜已选中[6]
是null
。您能告诉我们所选的是什么以及如何获得它吗?您能告诉我们整个表单以及从PHP获得的输出吗?它只显示null。请尝试添加数据类型:“application/json”
对于您的ajax调用,输出仍然是相同的:null。此外,我真的很想知道为什么在刷新页面后显示输出。它不是只有在单击按钮后才会显示吗?这是一个ajax调用,我不知道dump
和ajax的行为如何,但我猜它不是这样工作的。因此,我将在使用console.log(…)
insidesuccess:function(data){
。我猜已选中[6]
为null
。您能告诉我们所选的是什么以及您是如何得到它的吗?谢谢@goulashsoup,但我忘了告诉您,在我的控制器中,我已经有一些东西要返回了-我在其中渲染了一个小树枝文件。返回->$this->render('AcmeBundle:Project:edit.html.twig,array('someData=>$someData))
那么,通过这个,仍然可以返回JsonResponse吗?如果可以,如何返回?非常抱歉,我对PHP和Symfony2非常陌生,所以我几乎不知道一件事。@Dianne您想用控制器实现什么?我想您只是想将变量放入控制器并对其进行处理……Ajax是一种异步调用:它是以javascript开始,以javascript结束,因此无论您在控制器中做什么,您在其中返回的内容都将以javascript返回,在本例中,javascript是成功的data
变量:function(data){…}
…是的,是的,我已经知道了。我昨天发现了错误,它就在URL中。无论如何,谢谢你。我现在的问题是,我无法使用控制器中收到的变量。它显示“内部服务器错误”。或者说我想在find()中将其用作参数方法,以便它将获取与该变量相关的所有数据。$data=$request->query->get('data');
然后$this->getdoctor()->getRepository('AcmeBundle:Project')->find($data);
谢谢@goulashsoup,但我忘了告诉我的控制器,我已经读过了