jsp+ajax实现无刷新上传文件的方法

本文实例讲述了jsp+ajax实现无刷新上传文件的方法。分享给大家供大家参考,具体如下:

列表页:selectaddress.jsp
js页:ajax_edit.js
jsp处理页:editaddress.jsp
上传工具类:UploadUtil.java

思想:由于安全问题,javascript操纵不了文件, 导致ajax不能动态上传文件,所以选择了iframe,

列表页把form表单提交到一个隐式的iframe里面,设置表单的属性

代码如下:

enctype='multipart/form-data'  target='hidden_frame'

然后,处理页处理后返回

代码如下:

out.println('<script>parent.callback(" 返回值 ")</script>');

列表页执行回调函数!

selectaddress.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ page import="com.wap3.navigater.service.*" %>
<%@ page import="com.wap3.navigater.dao.*" %>
<%@ page import="com.wap3.navigater.pojo.*" %>
<%@ page import="com.wap3.navigater.util.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript" src="../js/ajax_edit.js"></script>
<script type="text/javascript" src="../js/jquery.jclock.js"></script>
<script type="text/javascript" src="../js/common.js"></script>
<script type="text/javascript" src="../js/jquery.form.js"></script>
<script type="text/javascript" src="../js/fileTypeJudge.js"></script>
<script type="text/javascript" src="../js/jquery.datepick.js"></script>
<script type="text/javascript" src="../js/jquery.datepick-zh-CN.js"></script>
<link media=all href="../css/common.css" type=text/css rel=stylesheet>
<title>Insert title here</title>
<style type="text/css">
 @import "inc/jquery.datepick.css";
</style>
<script type="text/javascript">
var $imgthis;
 $(function(){
  var oldValue;
  $(".package_list .edit").bind("dblclick",function(){
   oldValue = $(this).text();
   $(this).ajax_edit("editaddress.jsp",oldValue);
  });
  $(".package_list .edit_img").bind("dblclick",function(){ //
   oldValue = $(this).html();
   $imgthis = $(this);
   $(this).parents("tr.package_list").siblings(".package_list").find(":input.cancel").trigger("click");
   $(this).ajax_edit_img("editaddress.jsp",oldValue);
  });
  $(".package_list .edit :input[type!=file]:visible").live("blur",function(){
   $(this).ajax_handle("editaddress.jsp?action=edit",oldValue);
  });
  $("#editcategoryName").live("change",function(){
   $(this).ajax_handle("editaddress.jsp?action=edit",oldValue);
  });
  $("#del").click( function () {
   if($(":checkbox.urlid:checked").size()>0){
    var result = confirm("不可恢复的操作:确定要吗?"+ '\n' +"提示:如果删除大类会删除大类及下面的子类!!!");
    if (result) {
     var url = location.href;
     alert(url);
     return ;
     $(".main_table").wrap("<form id='selectAddressForm' action='selectaddress.jsp?action=del' method='post'></form>");
     $("#selectAddressForm").submit();
    }
   }else{
    alert("请选择要删除的项目!");
    return false;
   }
  });
 });
 function callback(msg) //处理JSP回调 过来的参数
 {
  $imgthis.html("<img class='logo' src='"+msg+"' title='"+msg+"' />");
 }
</script>
</head>
<body>
 <%
  String action = ParameterUtil.getStringParameter(request,"action","");
  FriendurlDao friendurlDao = new IbatisFriendurlDao();
  if("del".equals(action)){
   int[] urlids = ParameterUtil.getIntArrayParams(request,"urlid");
   for(int urlid : urlids){
    friendurlDao.deleteFriendurlByP(urlid);
   }
  }
  String navigaterPage = request.getRequestURL().toString();
  if(request.getQueryString()!= null){
   navigaterPage += "?"+request.getQueryString();
  }
  int categoryId = ParameterUtil.getIntParameter(request,"categoryId",0);
  if(categoryId == 0){
   response.sendRedirect("selectcategory.jsp");
   return;
  }
  int pageSize = ParameterUtil.getIntParameter(request,"pageSize",10);
  int pageNo = ParameterUtil.getIntParameter(request,"pageNo",1);
  String orderBy = ParameterUtil.getStringParameter(request,"orderBy","sequence");
  int ascOrDesc = ParameterUtil.getIntParameter(request,"ascOrDesc",0);
  CategoryDao categoryDao = new IbatisCategoryDao();
  Category category = categoryDao.selectCategoryByP(categoryId);
  String categoryName = category.getCategoryName();
  Friendurl friendurl = new Friendurl();
  friendurl.setCategoryId(categoryId);
  friendurl.addOrderBy(orderBy,ascOrDesc);
  List<Friendurl> friendurlList = friendurlDao.selectFriendurlByE(friendurl);
   //分页
  int totallpage = (int) Math.ceil(((double) friendurlList .size() * 1.0D)/ (double) pageSize);
  pageNo =pageNo <= 0 ? 1 : pageNo;
  pageNo =pageNo > totallpage ? totallpage : pageNo;
  DataPageUtil datePage = new DataPageUtil(friendurlList ,friendurlList .size(),pageSize, pageNo);
  boolean hasPrerPage = datePage.hasPrevPage();
  boolean hasNextPage= datePage.hasNextPage();
  int curpageNo = datePage.getPageNo();
  int pageCount = datePage.getPageCount();
  friendurlList = DataPageUtil.subList(friendurlList, pageSize, pageNo);
  if(friendurlList == null && friendurlList.size()<=0) {
   out.println("没有您需要的数据");
  }else{
  %>
  <%@include file="inc/header.jsp" %>
 <div id = "mainbox">
  <div class = "c1">
   <table class="main_table" width="100%" border="1" cellspacing="0" cellpadding="0">
    <tr>
     <th align="center" height="20" colspan="13" align="center" bgcolor="#006699">条目列表</th>
    </tr>
    <tr>
     <td width="10%" height="20" align="center" bgcolor="#009999">
      <input id="AllORNoall" type="checkbox"><label for="AllORNoall">全选</label>
      <input type="button" id="reserse" value="反选" />
     </td>
     <td width="7%" height="20" align="center" bgcolor="#009999">站点名称</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">站点别名</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">归类</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">公司地址</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">文字链接</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">图片链接</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">描述</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">有效开始时间</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">有效结束时间</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">电话</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">位置排序</td>
     <td width="7%" height="20" align="center" bgcolor="#009999">推荐序号</td>
    </tr>
    <%
     for(Friendurl friendurlTemp:friendurlList) {
      int urlId = friendurlTemp.getUrlid();
      String siteName = friendurlTemp.getSitename();
      String alias = friendurlTemp.getAlias();
      String address = friendurlTemp.getAddress();
      String texturl = friendurlTemp.getTexturl();
      String imageurl = friendurlTemp.getImageurl();
      String description = friendurlTemp.getDescription();
      Date validbegintime = friendurlTemp.getValidbegintime();
      Date validendtime = friendurlTemp.getValidendtime();
      String mobile = friendurlTemp.getMobile();
      int sequence = friendurlTemp.getSequence();
      int filter = friendurlTemp.getFilter();
     %>
    <tr class="package_list">
     <td height="20" align="center" class="urlid_td"><input type="checkbox" name="urlid" class="id_select urlid" value=<%= urlId%> /></td>
     <td height="20" align="center" class="edit sitename"><%=siteName %></td>
     <td height="20" align="center" class="edit alias"><%=alias %></td>
     <td height="20" align="center" class="edit categoryName"><%=categoryName%></td>
     <td height="20" align="center" class="edit address"><%=address %></td>
     <td height="20" align="center" class="edit texturl"><%=texturl%></td>
     <td height="20" align="center" class="edit_img imageurl"><img src='<%=imageurl%>' class='logo' title='<%=imageurl%>'/></td>
     <td height="20" align="center" class="edit description"><%=description%></td>
     <td height="20" align="center" class="edit validbegintime"><%=validbegintime == null || "".equals(validbegintime)? "--:--" : TimeUtil.date2Str(validbegintime)%></td>
     <td height="20" align="center" class="edit validendtime"><%=validendtime == null || "".equals(validendtime)? "--:--" : TimeUtil.date2Str(validendtime)%></td>
     <td height="20" align="center" class="edit mobile"><%=mobile%></td>
     <td height="20" align="center" class="edit sequence"><%=sequence%></td>
     <td height="20" align="center" class="edit filter"><%=filter%></td>
    </tr>
    <%
     }
     %>
    <tr>
     <td align="center"><input type="button" id="del" value="删除" /></td>
     <td align="center" colspan = "12">提示:双击选框修改属性值</td>
    </tr>
   </table>
  </div>
  <%@ include file="inc/pagination.jsp"%>
 </div>
 <%
  }
  %>
<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</body>
</html>

editaddress.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ page import="com.wap3.navigater.util.*" %>
<%@ page import="com.wap3.navigater.service.*" %>
<%@ page import="com.wap3.navigater.pojo.*" %>
<%@ page import="com.wap3.navigater.dao.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
 <%
  String target = ParameterUtil.getStringParameter(request,"target","");
  String action = ParameterUtil.getStringParameter(request,"action","");
  if(!"".equals(target) && target != null && "edit".equals(action)){
   int categoryId = 0;
   CategoryDao categoryDao = null;
   int urlid=0,status=0,sequence=0,filter=0;
   String sitename=null,alias=null,texturl=null,imageurl=null,description=null,mobile=null;
   Date validbegintime=null,validendtime=null;
   if("imageurl".equals(target)){
    System.out.println("图片上传");
    UploadUtil.upload(request, response);
    String imageurlpath = (String) request.getAttribute("imageurlpath");
    urlid = Integer.parseInt((String)request.getAttribute("urlid"));
    imageurl = (String)request.getAttribute("imageurlpath");
   }else{
    if("categoryName".equals(target)){
     String categoryName = ParameterUtil.getStringParameter(request,"categoryName","");
     Category category = new Category();
      category.setCategoryName(categoryName);
     categoryDao = new IbatisCategoryDao();
     Category category2 = categoryDao.selectCategoryByE(category).get(0);
      categoryId = category2.getCategoryId();
    }else{
     categoryId = ParameterUtil.getIntParameter(request,"categoryId",0);
    }
     urlid = ParameterUtil.getIntParameter(request,"urlid",0);
     sitename = ParameterUtil.getStringParameter(request,"sitename","");
     alias = ParameterUtil.getStringParameter(request,"alias","");
     texturl = ParameterUtil.getStringParameter(request,"texturl","");
     imageurl = ParameterUtil.getStringParameter(request,"imageurl","");
     description = ParameterUtil.getStringParameter(request,"description","");
     status = ParameterUtil.getIntParameter(request,"status",0);
     sequence = ParameterUtil.getIntParameter(request,"sequence",0);
     filter = ParameterUtil.getIntParameter(request,"filter",0);
     mobile = ParameterUtil.getStringParameter(request,"mobile","");
     validbegintime = ParameterUtil.getDateParameter(request,"validbegintime");
     validendtime = ParameterUtil.getDateParameter(request,"validendtime");
   }
   Calendar beginDay=Calendar.getInstance();
   Friendurl friendurl = new Friendurl();
    friendurl.setUrlid(urlid);
    friendurl.setSitename(sitename);
    friendurl.setDescription(description);
    friendurl.setTexturl(texturl);
    friendurl.setImageurl(imageurl);
    friendurl.setAlias(alias);
    friendurl.setSequence(sequence);
    friendurl.setMobile(mobile);
    friendurl.setCategoryId(categoryId);
    friendurl.setStatus(status);
    friendurl.setValidbegintime(validbegintime);
    friendurl.setValidendtime(validendtime);
    friendurl.setFilter(filter);
   FriendurlDao friendurlDao = new IbatisFriendurlDao();
   friendurlDao.updateFriendurlByP(friendurl);
   Friendurl friendurl2 = friendurlDao.selectFriendurlByE(friendurl).get(0);
   if(friendurl2 != null){
    String methodName = "get" + target.substring(0,1).toUpperCase()+target.substring(1);
    if(target.endsWith("time")){
     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
     out.println(TimeUtil.date2Str(((Date)(friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{})))));
    }else if("categoryName".equals(target)){
     out.println(categoryDao.selectCategoryByP(friendurl2.getCategoryId()).getCategoryName());
    }else if("imageurl".equals(target)){
     // 无刷新关键的步骤,让iframe的父辈body执行callback这个函数
     out.println("<script>parent.callback('"+friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{})+"')</script>");
    }else{
     out.println(friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{}));
    }
   }else{
    out.println("更新失败");
   }
  }
%>

ajax_edit.js

(function(){
  $.fn.extend({
   ajax_edit:function(str,oldValue){
    return this.each(function(){
     $this = $(this);
     var id;
     var nameId = $this.attr("class").split(" ")[1];
     var idName = $this.parents("tr.package_list").find("td:first-child :input[type=checkbox]").attr("class").split(" ")[1];
     id = $this.siblings("."+idName+"_td").find("input").val();
     if(nameId == "categoryName" && str == "editaddress.jsp"){
      $this.load("categorylist.jsp",{'oldValue':oldValue,'urlid':id});
     }else{
      $this.html("<form id='selectaddressForm'><input type='hidden' name='"+idName+"' value='"+id+"' /><input type='hidden' name='target' value='"+nameId+"' /><input type='text' name='"+nameId+"' value='"+oldValue+"'/></form>");
      $this.find(":input:last").focus();
     }
    })
   },
  ajax_edit_img:function(str,oldValue){ //处理图片上传AJAX 关键的一步form表格里的 target='hidden_frame'提交到ID为hidden_frame的iframe里面
   return this.each(function(){
    var $this = $(this);
    var nameId = $this.attr("class").split(" ")[1];
    var idName = $this.parents("tr.package_list").find("td:first-child :input[type=checkbox]").attr("class").split(" ")[1];
    var id = $this.siblings("."+idName+"_td").find("input").val();
    var $imgForm = $("<form id='selectaddressForm_img' action='editaddress.jsp?action=edit&target=imageurl' method='post' enctype='multipart/form-data' target='hidden_frame'><input type='hidden' name='"+idName+"' value='"+id+"' /><input type='file' name='"+nameId+"' /><input type='button' class='cancel' value='取消' /><input type='button' class='ok' value='上传' /></form>");
    $this.html($imgForm);
    $this.find(":input:last").focus();
    $imgForm.find(":input[type=file]").bind("change",function(){
     $(this).fileTypeJudge("photo");
    })
    $imgForm.find(":input.ok").bind("click",function(){
     var $button = $(this);
     if($imgForm.find(":input[type=file]").val()==''){
      alert("请上传图片!");
      return false;
     }
     $button.attr("disabled",true);
     $("#selectaddressForm_img").submit();
    })
    $imgForm.find(":input.cancel").bind("click",function(){
     $(this).parents(".edit_img").html(oldValue);
    });
   })
  },
  ajax_handle:function(str,oldValue){
    return this.each(function(){
     var $this = $(this);
     setTimeout(function(){
     if(!$("div").hasClass("datepick-control") || !$("div .datepick-control").is(":visible")){
      if(oldValue != $this.val() && $this.val() !="" ){
         $.post(
          str,$("#selectaddressForm").serialize(),
          function(data){
           $this.parents(".edit").text(data.trim()).css("color","red");
          }
         )
      }else{
       $this.parents(".edit").text(oldValue);
      }
     }
     },1000);
    })
   }
  })
})(jQuery)

希望本文所述对大家ajax程序设计有所帮助。

(0)

相关推荐

  • JSP XMLHttpRequest动态无刷新及其中文乱码处理

    1.在页面的<script type="text/JavaScript" >内加入 //无刷新请求的xmlhttp请求 var http_request=false; function createRequest(url) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_reque

  • JSP刷新页面表单重复提交问题解决办法分享

    使用sessionID和时间戳作为标识,关键代码如下: 复制代码 代码如下: public class SswpdjAction extends BaseAction{     public String execute(){     /**业务代码**/     ................     //设置标识     this.setSessionToken();     //转到添加页面     return "toAdd";     }     public String

  • 一个可以防止刷新的JSP计数器

    <%@ page contentType="text/html;charset=gb2312" %> <!--jsp计数器--> <%-- 以前学ASP时,用ASP做防止刷新的计数器很简单,以下是一个用JSP做的计数器--%> <html> <head> <title>jsp计数器</title> </head> <body> <%@ page import="j

  • JSP防止网页刷新重复提交数据的几种方法

    本篇文章主要介绍了网页如何防止刷新重复提交与如何防止后退的解决方法,具体如下: 提交后禁用提交按钮(大部分人都是这样做的) 如果客户提交后,按F5刷新怎么办? 使用Session 在提交的页面也就是数据库处理之前: if session("ok")=true then response.write "错误,正在提交" response.end end if 数据处理完后,修改session("ok")=false. 数据处理成功马上Redirec

  • jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验)

    本文实例讲述了jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验).分享给大家供大家参考,具体如下: 前台显示页面: welcome.jsp <%@ page language="java" contentType="text/html; utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transiti

  • ajax局部刷新一个div下jsp内容的方法

    用AJAX刷新一个DIV中的jsp内容 复制代码 代码如下: <script type="text/javascript"> var xmlhttp; function startrefresh(){ xmlhttp=new XMLHttpRequest(); xmlhttp.open("POST,"ss.jsp",true); xmlhttp.setRequestHeader("Content-type","ap

  • JSP 自动刷新的实例详解

    JSP 自动刷新的实例详解 考虑一个网页被显示实时游戏得分或股市状况或货币兑换利率.对于所有这些类型的网页,你需要使用的刷新或重新加载按钮,您的浏览器定期刷新网页. JSP使这个工作变得简单,它提供一种机制,可以使网页在这样一种方式,它会在给定的时间间隔后自动刷新. 刷新网页的最简单的方法是使用方法setIntHeader()响应对象.下面是该方法的签名: public void setIntHeader(String header, int headerValue) 此方法发送回标题"刷新&q

  • jsp+ajax实现无刷新(鼠标离开文本框即验证用户名)实现思路

    jsp+ajax实现无刷新,鼠标离开文本框即验证用户名,操作如下:新建一个输入页面,起名为input.jsp, 复制代码 代码如下: <%@ page contentType="text/html; charset=utf-8"%> <html> <head> <title>jsp+ajax实现无刷新_鼠标离开文本框即验证用户名</title> <meta http-equiv="Content-Type&qu

  • jsp+ajax实现无刷新上传文件的方法

    本文实例讲述了jsp+ajax实现无刷新上传文件的方法.分享给大家供大家参考,具体如下: 列表页:selectaddress.jsp js页:ajax_edit.js jsp处理页:editaddress.jsp 上传工具类:UploadUtil.java 思想:由于安全问题,javascript操纵不了文件, 导致ajax不能动态上传文件,所以选择了iframe, 列表页把form表单提交到一个隐式的iframe里面,设置表单的属性 复制代码 代码如下: enctype='multipart/

  • ajax实现无刷新上传文件功能

    本文实例为大家分享了ajax实现无刷新上传文件功能的具体代码,供大家参考,具体内容如下 详细代码如下 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ajax无刷新上传文件</title> <script> window.o

  • 谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法

    发请求有两种方式,一种是用ajax,另一种是用form提交,默认的form提交如果不做处理的话,会使页面重定向.以一个简单的demo做说明: html如下所示,请求的路径action为"upload",其它的不做任何处理: <form method="POST" action="upload" enctype="multipart/form-data"> 名字 <input type="text&q

  • asp.net中MVC借助Iframe实现无刷新上传文件实例

    本文实例讲述了asp.net中MVC借助Iframe实现无刷新上传文件的方法.分享给大家供大家参考.具体实现方法如下: html: 复制代码 代码如下: <div id="uploadwindow" style="display: none;">     <form action="/ShopActivitys/ImportActivityItems" id="form1" name="form1&

  • Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】

    本文实例讲述了Jquery+AJAX实现无刷新上传并重命名文件操作.分享给大家供大家参考,具体如下: index.html <!DOCTYPE html> <html> <head> <title>Ajax上传图片</title> <meta charset="utf-8"> <script src="https://www.jq22.com/jquery/jquery-3.3.1.js"

  • 使用jQuery ajaxupload插件实现无刷新上传文件

    项目中会经常用到AJAX无刷新上传图片,但是iframe上传和flash插件都是比较复杂的,所以就找了一个jquery的插件. 代码如下 使用方法如下 <script type="text/javascript"> $(function () { var button = $('#upload'); new AjaxUpload(button, { action: '/upload/imagesAjaxUpload', name: 'upload', onSubmit: f

  • 通过隐藏iframe实现无刷新上传文件操作

    其实在ajax出现之前,web应用也可以是无刷新的,那时大多通过IFrame来做到这一点.当然Ajax出现之后,人们一窝蜂地投奔Ajax 的阵营了,iFrame 就乏人问津了.但是用iFrame来实现无刷新上传文件确实一个很好的选择. 解决办法是通过一个隐藏的iframe来处理上传操作我采用的是ReactJS,amazeui,nodejs 1.html target指向iframe的name,就是把上传后的操作交给iframe来处理. <form id="supplyformFile&qu

  • php+iframe实现隐藏无刷新上传文件

    首先ajax不能上传文件,这误导了我有段时间,今晚睡不着就照着说明做了个无刷新上传文件 其实原理很简单 复制代码 代码如下: <form enctype="multipart/form-data" method="POST" target="upload" action="http://localhost/class.upload.php" > <input type="file" nam

  • PHP无刷新上传文件实现代码

    index.html 复制代码 代码如下: <html> <head> <title>无刷新上传文件</title> <meta Content-type="text/html" charset="utf-8" /> <script type="text/javascript"> function startUpload() { document.getElementById

  • jQuery Ajax使用FormData对象上传文件的方法

    FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". 在 Mozilla Developer 网站 使用FormData对象 有详尽的FormData对象使用说明. 但上传文件部分只有底层的XMLHttpRequest对象发送上传请求,那么怎么通过jQuery的Ajax上传呢? 本文将介绍通过jQuery使用FormData对象上传文件. 使用<form>表单初始化FormData对象方式上传文件 HTM

随机推荐