Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Symfony中提交表单后如何关闭窗口选项卡?_Javascript_Php_Jquery_Symfony_Twig - Fatal编程技术网

Javascript 在Symfony中提交表单后如何关闭窗口选项卡?

Javascript 在Symfony中提交表单后如何关闭窗口选项卡?,javascript,php,jquery,symfony,twig,Javascript,Php,Jquery,Symfony,Twig,我正在窗口选项卡中提交一个symfony表单。提交表单后,“提交”按钮应关闭窗口,并刷新打开页面。所以我使用jquery来完成这部分 $('#submitAndClose').on('submit', function () { setTimeout( function () { opener.location.reload(true); window.close(); } , 3000); }) 但我想,因为symfony在提交

我正在窗口选项卡中提交一个symfony表单。提交表单后,“提交”按钮应关闭窗口,并刷新打开页面。所以我使用jquery来完成这部分

$('#submitAndClose').on('submit', function () {
   setTimeout(
     function () {
        opener.location.reload(true);
        window.close();
     }
   , 3000);
})
但我想,因为symfony在提交子项后刷新页面,jquery无法正常工作

这是我在SymfonForm中的提交按钮:

->add('saveAndClose', SubmitType::class, [
     'label' => 'Save and close',
])
下面是细枝部分:

{{ form_widget(form.saveAndClose, {
    attr: {
        id: 'submitAndClose',
    }
}) }}
这是控制器部件,请参阅更多信息:

/**
* @param Request $request
* @param int $id
*
* @return Response
*
* @Route("/{id}",  methods={"GET", "POST"})
*/
public function editAction(
    Request $request,
    int $id
): Response {

    $user = $this->em->getRepository(User::class)->find($id);
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        $this->em->flush();
    }

    return $this->render('user/edit.html.twig', [
        'form' => $form->createView(),
    ]);
}
现在,当我提交表单时,它可以工作,但不会关闭窗口

setTimeout仅用于测试,但不是必需的。
有什么想法吗?

为什么要重新加载页面?因为您重新加载了页面,所以它不会关闭,您可以使用纯JavaScript来完成这项工作

document.getElementById('saveAndClose').onclick=()=>window.close();

但是您的情况可能类似于

您不应该使用超时来关闭选项卡。 您可以在处理表单后将变量传递给视图,例如
close\u window
。在视图中,您可以执行以下操作,而不是超时:

{% if close_window|default %}
    <script>window.close();</script>
{% endif %}
{%如果关闭|窗口|默认值%}
window.close();
{%endif%}

为什么在提交后重新加载?为什么不关闭该选项卡?请分享更多详细信息。这与PHP、Symfony或Twig有什么关系?他们中没有一个能处理浏览器标签我不明白我为什么-1@AngelDeykov有没有办法防止在提交后重新加载页面?@NicoHaase well OP必须在页面发送到服务器后关闭该选项卡谢谢你,你救了我一天。我想用ajax来实现它,重写我的控制器和所有东西。这条路容易多了@黑背