iframe+javascript实现一个表单提交后多个处理文件按序处理

最近在弄一个网页的问题,总结如下。

【问题描述】

页面中包括以下几个部分:1)表单form,供用户输入图片文件;2)iframe1,显示a.php文件的内容,a.php接收客户端图片并保存,后台程序处理图片,生成相关数据文件;3)iframe2,显示b.php文件的内容,b.php读取结果文件对其进行分页显示;

【实现思路】

以上功能主要在于两个问题:

1,form表单提交的形式一般是:input type="sumit"的表单元素配合form的action地址完成提交。此处要求先用a.php处理,在a.php处理完成后用b.php进行后续处理,如果使用JavaScript修改form的target和action进行两次提交,前后顺序得不到保证。思路是:form表单提交至a.php,在a.php的文件中使用document.ready事件,通过DOM元素访问方式:parent.document.getElementById(id)访问到iframe2控件,设置其src属性值为b.php即可保证处理顺序;

2,在iframe2中进行分页显示b.php的内容:思路是b.php中使用ajax异步请求显示数据,编写c.php文件接收请求的页数,然后读取文件数据以jason形式将列表传送给b.php,由b.php对数进行HTML标签包装;

【实现的详细代码】

  • 前端显示页面:
 <form id="form" name="form" method="post" enctype="multipart/form-data">
   <input type="file" name="file" id="file" accept="image/*" onchange="preview();"/>
 </form>

 <iframe name="hidden_frame1" id="hidden_frame" frameborder="0"></iframe> <iframe name="hidden_frame2" id="hidden_frame1"frameborder="0"></iframe>
function preview() {
    var form = document.getElementById("form");
    form.target="hidden_frame1";
    form.action="a.php";
    form.submit();
}
  • a.php后台处理页面
<html>
<head>
    <meta charset="gbk">
    <script src="js/jquery-1.11.3.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
    var iframeSearch=parent.document.getElementById("hidden_frame2");
    iframeSearch.src="b.php";
});
</script>
<div>
<!--其他页面内容-->
</div>
</body>
</html>
  • b.php后台处理页面
<html>
<head>
<style type="text/css">
#list{width:680px; height:530px; margin:50px auto 2px auto; position:relative}
#list ul li{ float:left;width:220px; height:260px; margin:2px}
#list ul li img{width:220px; height:220px}
#list ul li p{line-height:22px}
#pagecount{width:500px; margin:10px auto 2px auto; padding-bottom:20px; text-align:center}
#pagecount span{margin:4px; font-size:14px}
#list ul li#loading{width:120px; height:32px; line-height:32px; border:1px solid #d3d3d3; position:absolute; top:35%; left:42%; text-align:center; background:#f7f7f7 url(loading.gif) no-repeat 8px 8px;-moz-box-shadow:1px 1px 2px rgba(0,0,0,.2); -webkit-box-shadow:1px 1px 2px rgba(0,0,0,.2); box-shadow:1px 1px 2px rgba(0,0,0,.2);}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
var curPage = 1; //当前页码
var total,pageSize,totalPage;
//获取数据
function getData(page){
    $.ajax({
        type: ‘POST‘,
        url: ‘pages.php‘,
        data: {‘pageNum‘:page-1},
        dataType:‘json‘,
        beforeSend:function(){
            $("#list ul").append("<li id=‘loading‘>loading...</li>");
        },
        success:function(json){
            $("#list ul").empty();
            total = json.total; //总记录数
            pageSize = json.pageSize; //每页显示条数
            curPage = page; //当前页
            totalPage = json.totalPage; //总页数
            var li = "";
            var list = json.list;
            $.each(list,function(index,array){ //遍历json数据列
                li += "<li><a href=‘#‘><img src=‘"+array[‘pic‘]+"‘>"+array[‘title‘]+"</a></li>";
            });
            $("#list ul").append(li);
        },
        complete:function(){ //生成分页条
            getPageBar();
        },
        error:function(){
            alert("数据加载失败");
        }
    });
}

//获取分页条
function getPageBar(){
    //页码大于最大页数
    if(curPage>totalPage) curPage=totalPage;
    //页码小于1
    if(curPage<1) curPage=1;
    pageStr = "<span>共"+total+"条</span><span>"+curPage+"/"+totalPage+"</span>";

    //如果是第一页
    if(curPage==1){
        pageStr += "<span>首页</span><span>上一页</span>";
    }else{
        pageStr += "<span><a href=‘javascript:void(0)‘ rel=‘1‘>首页</a></span><span><a href=‘javascript:void(0)‘ rel=‘"+(curPage-1)+"‘>上一页</a></span>";
    }

    //如果是最后页
    if(curPage>=totalPage){
        pageStr += "<span>下一页</span><span>尾页</span>";
    }else{
        pageStr += "<span><a href=‘javascript:void(0)‘ rel=‘"+(parseInt(curPage)+1)+"‘>下一页</a></span><span><a href=‘javascript:void(0)‘ rel=‘"+totalPage+"‘>尾页</a></span>";
    }

    $("#pagecount").html(pageStr);
}

$(function(){
    getData(1);
    $(document).on("click", "#pagecount span a", function() {
                var rel=$(this).attr("rel");
                if(rel) getData(rel);
             });
});
</script>
</head>

<body>
<div id="main">
    <div id="list">
        <ul></ul>
    </div>
    <div id="pagecount"></div>
</div>
</body>
</html>
  • pages.php页面传送json数据
<?php
include_once(‘connect.php‘);

$page = intval($_POST[‘pageNum‘]);

$result = mysql_query("select id from food");
$total = mysql_num_rows($result);//总记录数

$pageSize = 6; //每页显示数
$totalPage = ceil($total/$pageSize); //总页数

$startPage = $page*$pageSize;
$arr[‘total‘] = $total;
$arr[‘pageSize‘] = $pageSize;
$arr[‘totalPage‘] = $totalPage;
$query = mysql_query("select id,title,pic from food order by id asc limit $startPage,$pageSize");
while($row=mysql_fetch_array($query)){
     $arr[‘list‘][] = array(
         ‘id‘ => $row[‘id‘],
        ‘title‘ => $row[‘title‘],
        ‘pic‘ => $row[‘pic‘],
     );
}
//print_r($arr);
echo json_encode($arr);
?>

注:分页显示过程参考:http://www.daimajiayuan.com/sitejs-17717-1.html

时间: 2024-12-28 15:55:42

iframe+javascript实现一个表单提交后多个处理文件按序处理的相关文章

怎么实现form表单提交后不重新刷新当前页面

怎么实现表单提交后不重新刷新当前页面 如何实现表单提交后不重新刷新当前页面 <form name='form1' id='form1' action='/xbcw/cw/xx_xx.action' method='post'> <input type="button" id="btnSubmit" name="btnSubmit" value="保存" onclick="addKp()"

PHP关于表单提交 后 post get分页

PHP关于表单提交后分页函数的那点事--POST表单分页实现 phpfunctionclass加密inputjavascript 说到分页,其实你在Google一搜一大把.大部是通过GET实现,还有的是利用数据库查询的Limit来实现分页.当然表单也可以通过GET方式来提交,实现分页,就得把实现分页需用到参数用GET方式附在URL后面如这样: http://127.0.0.1/search.php?page=1&参数1=参数1值 当然我们有的时候并不想让别人知道我们要提交什么东东,要解决这一问题

struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input

原文地址:struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input jsp页面 1     function dosearch() {2         if ($("#textValue").val() == "") {3                 $("#errortip").html("<font color='#FF0000'>请输入查询内容</font>")

form表单提交后保持输入的值

1.form表单提交后,继续保持原来输入的值 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta charset="UTF-8"> <title>form表单提交后保持输入的值</title> </head> <body> <form class="form

yii 一个表单提交多个模型数据

正在需要的时候发现了这个大牛的博文,动手实践过后,记录在此. --user表 Create Table: CREATE TABLE `user` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `username` varchar(45) DEFAULT NULL,   `userpass` varchar(45) DEFAULT NULL,   `profile_id` int(11) DEFAULT NULL,   PRIMARY KEY (`id`)

ajax form表单提交 input file中的文件

ajax form表单提交 input file中的文件 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为了解决这个问题我走了不少弯路: 1.用原生的 input file , 不支持ajax上传文件,你肯定会说可以用 ajax form表单上传了呀?不过我后面还要调用上传成功后用js处理一些对话框,所以这种方法排除 2.用了 uploadify 上传插件,弄出来能上传东西,结果不理想:因为不能判断上传的

给一个表单提交绑定一个点击事件

如果给一个表单绑定一个点击事件会发生什么事情 <input type="submit" name="button" value="提交内容" class="btn btn-primary" /> (提交快捷键: $(".btn").click(function(){ window.alert("add"); }) 如上面所示的:会先执行点击事件,然后再进行提交,这样能够进行验

Jquery表单提交后获取返回Json值

1.给form添加id值: <form action="/News/SaveMessage" method="post" accept-charset="utf-8" class="form" id="frm-reg" name="frm-reg"> 设置所有input标签的name属性值为数据库的字段值,即可以传值到后台 2.给提交按钮添加id值: <input cl

JavaScript控制阻止表单提交

1.在表单上使用onSubmit方法 <?php $form = ActiveForm::begin([ 'options'=>[ 'class' => 'form-horizontal', 'enctype' => 'multipart/form-data', 'onSubmit'=>'return validateForm(event)', ], 'fieldConfig' => [ 'template' => '{input}{error}', 'optio