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

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

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

思想:由于安全问题,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="/UploadFiles/2021-04-02/jquery.js">

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"+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程序设计有所帮助。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。