用javascript或Symfony重新加载页面?

时间:2016-09-17 21:42:22

标签: javascript php symfony-2.8

提交表单后,将关闭模式并发送成功通知。 但是,新提交的数据并未显示为已捕获,因为页面未刷新。 (不能用PHP或javascript刷新它)

在这种情况下,我假设javascript刷新是理想的 - 或者Symfony重定向会更合适吗?

php / symfony中的成功代码:

$passthroughVars = array(
    'closeModal'=> 1,
    'jsContent' => 'custom_widget'
);

$passthroughVars['widgetHtml'] = $this->renderView('WidgetBundle:Widget:widget.html.php', array(
    'widget' => $widget,
));
$passthroughVars['widgetId'] = $widget->getId();
$passthroughVars['flashes'] = $this->getFlashContent();

$response = new JsonResponse($passthroughVars);
$response->headers->set('Content-Length', strlen($response->getContent()));

return $response;

使用Javascript:

Widgety.widgetOnLoad = function (container, response) {
    if (response) {
        if (response.upWidgetCount) {
            var count = parseInt(mQuery('#WidgetCount').html());
            count = (response.upWidgetCount > 0) ? count + 1 : count - 1;

            mQuery('#WidgetCount').html(count);
        }

        if (response.widgetHtml && response.widgetId) {
            var el = '#Widget' + response.widgetId;
            if (mQuery(el).length) {
                mQuery(el).replaceWith(response.widgetHtml);
            } else {
                mQuery('#widget-container .widget').prepend(response.widgetHtml);
            }

            mQuery(el + " *[data-toggle='ajaxmodal']").off('click.ajaxmodal');
            mQuery(el + " *[data-toggle='ajaxmodal']").on('click.ajaxmodal', function (event) {
                event.preventDefault();

                Widgety.ajaxifyModal(this, event);
            });

            mQuery(el + " *[data-toggle='confirmation']").off('click.confirmation');
            mQuery(el + " *[data-toggle='confirmation']").on('click.confirmation', function (event) {
                event.preventDefault();
                WidgetyVars.ignoreIconSpin = true;
                return Widgety.showConfirmation(this);
            });
        }

        if (response.deleted && response.widgetId) {
            var el = '#Widget' + response.widgetId;
            if (mQuery(el).length) {
                mQuery(el).remove();
            }
        }
    }
};

在javascript中,我尝试添加document.location.reload(true),但内容没有刷新。 同样,使用PHP重定向,模态拒绝关闭,即使在传递closeModal = 1时也是如此。

代码:

return $this->redirect($this->generateUrl('widget_page',
array(
    'passthroughVars' => array(
        'closeModal'    => 1,
    ),
    'widgetAction' => 'overview',
    'widgetId' => $widget->->getId()
    )
));

2 个答案:

答案 0 :(得分:1)

要在Javascript中重新加载网站,您需要调用window.location.reload()函数。您也可以拨打具有类似效果的window.location.href = window.location.href(这已在此处得到解答,并提供了更多详细信息,How to reload a page using JavaScript?)。

虽然我认为更好的解决方案是使用Javascript(而不是重新加载页面)将更新的内容添加到您的网页,这对于用户体验来说会“更好”。 / p>

答案 1 :(得分:0)

如果您要查找的是提交表单后刷新页面(因此模式已关闭),则可能需要查看以下内容:

$('#yourModal').on('hide.bs.modal', function () {
    window.location.reload()
});

这应该有效。