Javascript Symfony2将ajax请求数据传递给表单呈现控制器

Javascript Symfony2将ajax请求数据传递给表单呈现控制器,javascript,php,ajax,forms,symfony,Javascript,Php,Ajax,Forms,Symfony,我有一个Symfony表单的问题,我想根据预先查看的记录预先填充它。目的是创建一种更改记录数据的方法。 我通过javascript导航到表单页面,并向呈现表单的同一控制器发送ajax请求 这是用于查看记录的页面的一部分: <input type="button" id="changeRecord" value="change"/> record id: <div id="recordID"> {{ record_id }} </div> j

我有一个Symfony表单的问题,我想根据预先查看的记录预先填充它。目的是创建一种更改记录数据的方法。 我通过javascript导航到表单页面,并向呈现表单的同一控制器发送ajax请求

这是用于查看记录的页面的一部分:

    <input type="button" id="changeRecord" value="change"/>

    record id: <div id="recordID"> {{ record_id }} </div>
javascript中的按钮代码如下所示:

    $('#changeRecord').click(function () {
        window.location.replace(Routing.generate(recordChangeRoute));

        $.ajax({
            url: Routing.generate(recordChangeAjaxRoute),
            type: "POST",
            data: {'recordID': getCurrentRecordID()}
    });
    // both Routes point to the same controller
    // problem located here ???
Symfony控制器动作如下:

我努力实现的目标是:

  • 查看记录
  • 转到预填表格
  • 进行更改并保存
查看记录、创建表单、将更改持久化到数据库—所有这些都是工作。不起作用的是访问控制器内所需的ID。 我可以以我在其他控制器操作中尝试的方式访问ajax请求数据,而不会出现问题。 “表格请求”是如何干扰的?还是这样? 我必须使用事件侦听器吗


非常感谢您的帮助,提前谢谢

我把ajax的东西放在一边,通过GET提交所需的数据,从而解决了这个问题。像这样:

    $('#changeRecord').click(function () {
    window.location.replace(Routing.generate(recordChangeRoute, {'recordID': getCurrentRecordID()}));
    });

非常感谢您的输入。

我想,
recordId
是只在这个问题中使用的占位符吗?在现实生活中,它将以
[a-z]
开头,后跟一个id号?recordId是用于访问发送到服务器的数据的“变量名”。它将包含一个整数。它是在ajax函数中创建的。将一个整数设置为ID属性将不起作用,它需要一个字母(a-z)作为第一个字符。这很奇怪,因为它在同一控制器内的同一项目中的另一种情况下确实是这样工作的-将通过ajax从html获取的ID整数发送到控制器,查询数据库,返回一些响应。为什么要创建$AjaxRequest?似乎$recordID=$request->request->get('recordID')可以工作。使用get来更改记录是一个非常糟糕的主意。当您违反HTTP协议时,各种各样的事情都可能出错。最好使用像firebug这样的工具来查看浏览器和服务器之间实际传递的内容,并使ajax POST请求正常工作。
public function changePlasmidRecordAction(Request $request) {
    $em = $this->getDoctrine()->getManager();
    $recordHandle = $em->getRepository('DataBundle:RecordClass');

    $AjaxRequest = Request::createFromGlobals();
    $RecordID = $AjaxRequest->request->get('recordID');

    $recordToUpdate = $recordHandle->findOneBy(array('id' => $RecordID));
    $updateForm = $this->createForm(new RecordClassType(), $recordToUpdate);
    $updateForm->handleRequest($request);

    if ($updateForm->isValid()) {
        $em->flush();
        return this->redirect($this->generateUrl('route_showRecord'));

    } else {
        return $this->render('DataBundle:RecordClass:updateRecord.html. twig',  
        array(
            'RecordID' => $RecordID,
            'form' => $updateForm->createView()
        ));
    }
}
    $('#changeRecord').click(function () {
    window.location.replace(Routing.generate(recordChangeRoute, {'recordID': getCurrentRecordID()}));
    });