【问题标题】:passing variable from twig JavaScript $.ajax to Symfony2 controller将变量从 twig JavaScript $.ajax 传递到 Symfony2 控制器
【发布时间】:2025-12-27 03:50:12
【问题描述】:

(我已经简化了上一个问题) 我需要使用 JavaScript 将变量传递给 Symfony2 控制器,将该变量设置为会话,然后返回会话变量。

//test1.html.twig with $.ajax script and <input> tag.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<form action="#" method="#">
    <input type="number" class="inputISBN" name="name" 
         value="666" onchange="myFunction()">
</form>

<script type='text/javascript'>
function myFunction() {
   var elementy = document.getElementsByClassName('inputISBN');
   var data = elementy[0].getAttribute('value');

   $.ajax({
        url: "{{ path('test') }}",
        type: "POST",
        data: data ,
        success: function() {alert("ok");}
    });   
}
</script>    

以下是控制器中的操作:

/**
 * @Route("/test1", name="test1")
 * @Template()
 */
public function test1Action()
{        
     return array();          
}


/**
 * @Route("/test", name="test")
 * @Template()
 */
public function testAction(Request $request)
{
    $data = $request->request->get('data');        
    $session = $request->getSession();    
    $session->set('data',$data );
    return array();
}


 /**
 * @Route("/test2", name="test2")
 * @Template()
 */
public function test2Action(Request $request)
{       
    $session = $request->getSession();    
    $data = $session->get('data');        
    echo '<pre>',print_r($data),'</pre>';         
    return array();
}

更改输入标签中的值时,我收到警报('ok'),但打开 test2Action 站点时 print_r($data) 仅返回 1。

【问题讨论】:

  • 添加testAction更新路由后,你清除缓存了吗?尝试在testAction 中返回一些数据,例如return new Response("data set");,并用ajax 捕获它。所以你会发现问题
  • 您检查过testAction 中的内容吗?使用$session-&gt;get('data'); 在会话中设置data 值后,测试您在会话中的内容

标签: javascript php ajax symfony


【解决方案1】:

当我将 data: data 更改为 data: { "data": data } 时它正在工作

  $.ajax({
        url: "{{ path('test') }}",
        type: "POST",
        data: data ,
        success: function() {alert("ok");}
    });

【讨论】:

  • 可能想查找 json 的基础知识。也可以尝试在浏览器中按 F12,然后单击网络选项卡。您实际上可以看到浏览器和服务器之间正在发送什么。
【解决方案2】:

ajax 的 url 中的路由错误:

url: "{{ path('test') }}",

必须是:

url: "{{ path('test1') }}",

【讨论】: