Ajax 修改Symfony 2中的请求对象

Ajax 修改Symfony 2中的请求对象,ajax,symfony,Ajax,Symfony,我的控制器上有以下代码: /** * * @Route("/{discountLevelItemId}/manage-product/update", name="discountlevel_manage_product_update", defaults={"_format"="json"} ) * @Method("POST") */ public function manageProductUpdateAction($discountLevelItemId, Request $re

我的控制器上有以下代码:

/**
 *
 * @Route("/{discountLevelItemId}/manage-product/update", name="discountlevel_manage_product_update", defaults={"_format"="json"} )
 * @Method("POST")
 */
public function manageProductUpdateAction($discountLevelItemId, Request $request)
{
    $em = $this->getDoctrine()->getEntityManager();
    $entity = $em->getRepository('CIInventoryBundle:DiscountLevelItem')->find($discountLevelItemId);
    $form = $this->createForm(new DiscountLevelItemCollectionType(), $entity);
    $form->bindRequest($request);

    if ($form->isValid()) {
        //remove items without discount type
        foreach ($entity->getDiscountLevelItemProducts() as $item) {
            if (!$item->getDiscountType()) {
                $entity->getDiscountLevelItemProducts()->removeElement($item);
                $em->remove($item);
            }
        }

        $em->persist($entity);
        $em->flush();

        $responseData = array(
            'status' => 'success',
            'message' => 'Supplier product discounts successfully saved.'
        );
    } else {
        $responseData = array(
            'status' => 'error',
            'form' => $this->renderView('CIInventoryBundle:DiscountLevel:manageProducts.html.twig', array(
                'entity' => $entity,
                'form' => $form->createView()
            ))
        );
    }
    return new Response(json_encode($responseData), 200, array('Content-Type'=>'application/json'));
}
此操作通过ajax调用。在调用此控制器之前,我过滤了一些数据,如下所示:

initForm: function() {
            //submit form function
            var options = {
                delegation: true,
                dataType: "json",
                beforeSubmit: function(arr, $form, options) {

                    //holds objects every four looping
                    var tempArray = new Array();
                    //holds changed objects that will only be submitted in the server.
                    var changedArray = new Array();
                    var found = false;
                    var idx = 1;

                    //get the token then remove from arr.
                    changedArray.push(arr.splice(arr.length-1,1)[0]);

                    for (var j = arr.length-1; j >= 0; j--) {
                        var obj = arr[j];

                        if ( viewCtrl.dliProductsChanged.indexOf(obj.value) != -1 ) {
                            found = true;
                        }

                        tempArray.push(arr[j]);

                        if(idx % 4 == 0) {
                            if (found == true) {
                                for(var i = 0; i < tempArray.length; i++){
                                    changedArray.push(tempArray[i]);
                                }

                                found = false;
                            }
                            tempArray.length = 0;
                        }

                        idx++;
                    }

                    arr.length = 0;

                    for(var i = 0; i < changedArray.length; i++){
                        arr.push(changedArray[i]);
                    }

                    viewCtrl.dliProductsChanged.length = 0;

                    $form.find( ".submit-button" ).button( "loading" );
                    $form.find( ".discount-value, .trucking" ).addClass( "uneditable-input" );
                    $form.find( ".discount-type" ).attr( "readonly", true );
                },
                success: function(responseText, statusText, xhr, $form) {
                    if ( responseText.status == "success" ) {
                        viewCtrl.modal.modal( "hide" );
                        $.growl.notice({ title: "<strong>Saved</strong>", message: responseText.message, size: "large", duration: 5000, location: "br" });
                        viewCtrl.dliProductsChanged.length = 0;
                    } else {
                        viewCtrl.modal.find( ".modal-content" ).html( responseText.form );
                    }

                    $form.find( ".submit-button" ).button( "reset" );
                }
            };

            $( "#manage-products-form" ).ajaxForm( options );
        },
initForm:function(){
//提交表单功能
变量选项={
代表团:是的,
数据类型:“json”,
提交前:函数(arr$表单、选项){
//每四个循环保存一个对象
var tempArray=新数组();
//保存仅在服务器中提交的已更改对象。
var changedArray=新数组();
var=false;
var-idx=1;
//获取令牌,然后从arr中删除。
更改阵列推送(阵列拼接(阵列长度-1,1)[0]);
对于(变量j=arr.length-1;j>=0;j--){
var obj=arr[j];
如果(viewCtrl.dliProductsChanged.indexOf(对象值)!=-1){
发现=真;
}
tempArray.push(arr[j]);
如果(idx%4==0){
if(find==true){
对于(var i=0;i已保存”,消息:responseText.message,大小:“大”,持续时间:5000,位置:“br”});
viewCtrl.dliProductsChanged.length=0;
}否则{
viewCtrl.modal.find(“.modal content”).html(responseText.form);
}
$form.find(“提交按钮”)。按钮(“重置”);
}
};
$(“#管理产品表单”).ajaxForm(选项);
},
我的问题是,当表单无效时,如何用筛选出的数据重新填充表单?我想到的第一件事是修改请求对象,然后重新绑定它,但我不知道如何实现它

有什么见解吗

PS:我在表单提交时使用JQUERY表单插件


谢谢

过滤一些数据的代码是一个javascript函数,这意味着它可以在客户端(浏览器)上工作。它与Symfony
请求
对象没有任何关系。如果使用ajax将修改后的数据发送到服务器(symfony),则不需要重新绑定请求数据,因为每个ajax请求都是一个新的HTTP请求和一个新的symfony
request
对象。那么,当表单无效时,有什么好方法可以获取所有已过滤掉的数据呢?