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请求和一个新的symfonyrequest
对象。那么,当表单无效时,有什么好方法可以获取所有已过滤掉的数据呢?