让我们从一开始就开始吧。
我已经使用链接制作了标签平移布局。当您点击链接时,会有一个下拉复选框表单通过
注入到html中$(".dropdown-toggle").click(function() {
var projectId = $("#permission-form").attr("data-project-id");
var userId = $(this).attr('data-user-id');
renderModules(projectId, userId, userId);
});
function renderModules(projectId, userId, divId)
{
$.get(Routing.generate('module_change_permission', {projectId: projectId, userId: userId}))
.success(function(msg) {
$('#modules-'+divId).html(msg);
});
}
module_change_permission路由指向控制器
public function moduleAction(Request $request, $projectId, $userId)
{
$project = $this->get('api.client.manager')->getProject($projectId);
if (null === $project) {
throw new Exception("Invalid projectId");
}
$em = $this->getDoctrine()->getManager();
$modulesInfo = $this->get('acme.modules.modulesinfo');
$module = $modulesInfo->getModule($project, $projectId, $userId);
if (null === $module) {
$module = $modulesInfo->createModule($projectId, $userId);
}
$form = $this->createForm(new ModuleType($em), $module[0]);
if ($this->getRequest()->isMethod('GET') && count($_GET)) {
$form->bind($request);
if ($form->isValid()) {
$em->persist($module[0]);
$em->flush();
}
$this->setFlash('modules_success', 'modules_controller.flash.success');
return $this->redirect($this->generateUrl($this->path, array('id' => $projectId)));
}
return $this->render('AcmeProjectBundle:Module:module.html.twig',
array(
'form' => $form->createView(),
'projectId' => $projectId,
'userId' => $userId,
)
);
}
现在我想做同样的事情 - 提交表单但没有重定向(只需刷新特定的div)。 AFAIK我应该使用AJAX。但问题是我不知道如何提交工作部分。
我一直在尝试这样:
$('.dropdown-menu-form').submit(function(e) {
var url = $(this).attr("action");
$.ajax({
type: "PUT",
url: url, // Or your url generator like Routing.generate('discussion_create')
data: $(this).serialize(),
dataType: "html",
success: function(msg){
alert("Success!");
}
});
return false;
});
但仍然不知道如何更改控制器部件。
答案 0 :(得分:0)
你在ajax声明中有PUT。因此,要获取ajax PUT在Symfony控制器中发布的数据,请尝试使用$data = $request->getContent();
并且也不要使用条件$this->getRequest()->isMethod('GET')
或者您可以将PUT方法更改为GET(甚至是POST)并使用您在moduleAction()控制器中执行的结果。