PHP结合layer处理弹出窗口提交的值

在开发中经常会遇到点击按钮弹出展示表单,在表单中填写信息后,点击保存,最后返回列表页的情况。

我们想实现的比较友好的效果通常是:用户点击按钮弹出子窗口,填写完子窗口中的表单信息后,点击子窗口中的保存按钮,页面提示保存成功,并关闭子窗口,最后刷新父页面。

为了更加优雅的弹出子窗口,我们使用了layer这一款优秀的jQuery插件。在使用过程中,可以很方便的弹出我们想要的页面,例如表单填写页面。
例如如下页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <title> 弹窗测试 </title>
    <meta charset="utf-8"/>
    <script src="https://cdn.bootcss.com/jquery/2.0.2/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/layer/3.0.1/layer.min.js"></script>
</head>
<body>
<button id="parentIframe">点击弹出窗口</button>
</body>
</html>
<script>
    function refresh() {
        location.reload();
    }
    //弹出一个iframe层
    $('#parentIframe').on('click', function () {
        layer.open({
            type: 2,
            title: '点击弹出窗口',
            maxmin: true,
            shadeClose: true, //点击遮罩关闭层
            area: ['800px', '520px'],
            content: 'http://127.0.0.1/test/layer/form.php'
        });
    });
</script>

点击“点击弹出窗口”按钮,页面会弹出子窗口显示http://127.0.0.1/test/layer/form.php的页面内容,form.php的代码如下:

<?php
if ($_POST) {
    //处理你的业务...
    echo "<script>parent.parent.layer.closeAll();parent.parent.layer.msg('添加成功,页面正在刷新');parent.parent.setTimeout('refresh()',2000);</script>";
    die;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <title> 弹窗测试 </title>
    <meta charset="utf-8"/>
</head>

<body>
<iframe name="iframe" id="iframe" style="display:none"></iframe>

<form action="#" method="post" target="iframe">
    <table border="1">
        <tr>
            <td>姓名</td>
            <td><input type="text" name="username"/></td>
        </tr>
        <tr>
            <td>年龄</td>
            <td><input type="text" name="age"/></td>
        </tr>
        <tr>
            <td colspan='2'><input type="submit" value="提交"/>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

注意表单form的target属性是指向的本页面的iframe,target的名称即为iframe的name。当填写了表单上的信息后,点击提交按钮,页面会将form表单中的信息提交到iframe中,由于iframe没有指定src属性,所以iframe的地址是页面自己,同时设置了display:none,所以是不可见的(为了便于观察效果,你也可以暂时先把display:none删除)。所以等同于表单提交到页面自身,只不过是展示在了自身的iframe里。自身的php代码里识别到了post过来的数据,则会输出一句js代码,js代码的目的是关闭顶级父窗口的layer弹出窗,并在顶层父窗口中显示提示信息,最后让顶级父页面在两秒钟后刷新自己。

发表评论

邮箱地址不会被公开。 必填项已用*标注