如何将变量从javascript传递到symfony2控制器

如何将变量从javascript传递到symfony2控制器,javascript,php,jquery,symfony,Javascript,Php,Jquery,Symfony,我有一个模式,表格中有一些数据,每行旁边有一个单选按钮。每次单击该单选按钮时,单击按钮后,相应的数据将存储在一个数组中。现在,我在将变量从javascript传递到控制器(数组的第6个索引)时遇到了一个问题 根据我的研究,大多数解决方案都使用ajax。我已经尝试了所有可能的代码,我可以在我的控制器,但似乎它没有收到任何东西。我在ajax调用中发送的数据没有到达控制器。 这是我的小枝文件: <button type="button" id="selectrow" class="btn btn

我有一个模式,表格中有一些数据,每行旁边有一个单选按钮。每次单击该单选按钮时,单击按钮后,相应的数据将存储在一个数组中。现在,我在将变量从javascript传递到控制器(数组的第6个索引)时遇到了一个问题

根据我的研究,大多数解决方案都使用ajax。我已经尝试了所有可能的代码,我可以在我的控制器,但似乎它没有收到任何东西。我在ajax调用中发送的数据没有到达控制器。 这是我的小枝文件:

<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
    s
    success
    中处理它:

    在控制器中:

    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
    s
    success
    中处理它:

    在控制器中:

    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(…)
    inside
    success: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,但我忘了告诉我的控制器,我已经读过了