easyUI前端ajax上传文件组件
2021-03-21 13:24
标签:文件名 callback settime false mon eof split let context 在上篇easyUI配合PageHelper实现分页的基础上,实现前端页面上传文件组件 其中itemList.jsp页面中文件上传dialog 页面效果 itemList.js导入方法定义 弹出框中内嵌页面excelInputDialog.jsp excelInputDialog.js ajaxfileupload.js easyUI前端ajax上传文件组件 标签:文件名 callback settime false mon eof split let context 原文地址:https://www.cnblogs.com/alphajuns/p/12723004.html/**
* 导入商品列表
*/
function importItemList() {
$(‘#excelImportDialog‘).dialog(‘open‘);
$(‘#excelImportDialog‘).html("");
}
@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
-- 引入easyUI样式 --%>
link rel="stylesheet" href="${pageContext.request.contextPath}/css/easyui.css" type="text/css" />
-- 引入jQuery --%>
script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js">script>
-- 引入jQuery easyUI --%>
script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.easyui.min.js">script>
script type="text/javascript"
src="${pageContext.request.contextPath}/js/lib/ajaxfileupload.js">script>
script type="text/javascript"
src="${pageContext.request.contextPath}/js/pages/common/excelInputDialog.js">script>
script type="text/javascript">
var commonParamObj = {};
commonParamObj.url = ‘${param.url}‘;
commonParamObj.params = ‘${param.params}‘;
script>
body class="easyui-layout">
div style="height: 40px;width:500px">
form id="uploadForm" enctype="multipart/form-data" method="POST">
table style="text-align: left;">
tr>
th style="font-size:13px;">清单表格:th>
td>input type="file" name="upFile" id="upFile" />td>
td>a href="javascript:void(0)" class="easyui-linkbutton"
onclick="uploadExcel()">上传a>td>
tr>
c:if test="${param.templateFile!=null && param.templateFile!=‘‘}">
tr>
th style="font-size:13px;">模板下载:th>
td colspan=2 style="text-align:left">a href="/templateFiles/${param.templateFile}" target="_blank">点击下载a>td>
tr>
tr>td colspan=3 style="text-align:left;color:red">请务必使用模块来编写数据,否则无法导入!td>tr>
c:if>
table>
form>
div>
body>
/**
* 上传附件
*/
function uploadExcel() {
if ($("#upFile").val() == "") {
$.messager.alert("提示", "上传文件为空!");
return;
}
var file = $("#upFile").val();
//校验文件名是否符合格式要求
var index = file.lastIndexOf("\\");
var myfile = file.substring(index + 1);
var pattern = /[^a-zA-Z0-9_().~\-\u4e00-\u9fa5]+/g; //正则表达式
var result = myfile.match(pattern);
if (result != null) {
$.messager.alert("提示", "文件名只能有汉字,字母,数字,(),_,-,~组成,不能存在空格!");
return;
}
var extend=$(‘#upFile‘).val().substr($(‘#upFile‘).val().lastIndexOf(".")+1);
var requestObj = GetRequest();
if("xls".indexOf(extend)==-1 && "xlsx".indexOf(extend)==-1){
$.messager.alert("提示信息","选择的文件必须是EXCEL文件,请确认!");
return;
} else {
$("#Loading").jqLoading();
$.ajaxFileUpload
(
{
url: TpmPage.contextPath + commonParamObj.url, //用于文件上传的服务器端请求地址
secureuri : false,
type:‘post‘,
data : requestObj,
fileElementId : ‘upFile‘,
dataType : ‘html‘,
success: function (response) //服务器成功响应处理函数
{
$("#Loading").jqLoading(‘destroy‘);
console.log("exceclInput success");
console.log(response);
if(response && response.startsWith("{")){
var responseObj = JSON.parse(response);
if(responseObj.succFlag==1){
//parent.$.messager.alert("tip",responseObj.msg);
var div = parent.document.createElement(‘div‘);
var msgInfo = "";
if(responseObj.msg && responseObj.msg.indexOf(";")>0){
var msgArr = responseObj.msg.split(";");
for(var x=0;x
";
}
}else{
div.innerHTML = responseObj.msg;
}
if(msgInfo){
div.innerHTML = msgInfo;
}
parent.$(div).dialog({
title: ‘Error‘,
width: 300,
height: 400,
modal: true,
resizable: true
});
return;
}
}
if(requestObj.callback){
eval(‘parent.‘+requestObj.callback)(response);
}
parent.$("#excelImportDialog").dialog("close");
},
error: function (data, status, e)//服务器响应失败处理函数
{
$("#Loading").jqLoading(‘destroy‘);
$.messager.alert(‘提示‘,‘清单导入失败!‘);
}
}
);
}
}
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i ) {
theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
}
}
return theRequest;
} // JavaScript Document
jQuery.extend({
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context || s, xhr, status, e );
}
// Fire the global callback
if ( s.global ) {
(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
}
},
createUploadIframe: function(id, uri)
{
//create frame
var frameId = ‘jUploadFrame‘ + id;
if(window.ActiveXObject) {
// var io = document.createElement(‘‘);
var io=document.createElement("iframe");
io.id=frameId;
io.name=frameId;
if(typeof uri== ‘boolean‘){
io.src = ‘javascript:false‘;
}
else if(typeof uri== ‘string‘){
io.src = uri;
}
var userAgent = navigator.userAgent;
var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1;
if (isIE) {
var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
reIE.test(userAgent);
var fIEVersion = parseFloat(RegExp["$1"]);
if (fIEVersion == 9 || fIEVersion == 10 || fIEVersion == 11) {
io = document.createElement(‘iframe‘);
io.id = frameId;
io.name = frameId;
}else if(fIEVersion){
// var io = document.createElement(‘‘);
var io=document.createElement("iframe");
io.id=frameId;
io.name=frameId;
if(typeof uri== ‘boolean‘){
io.src = ‘javascript:false‘;
}
else if(typeof uri== ‘string‘){
io.src = uri;
}
}
}
// if(jQuery.browser.version=="9.0" || jQuery.browser.version=="10.0" || jQuery.browser.version=="11.0") {
// io = document.createElement(‘iframe‘);
// io.id = frameId;
// io.name = frameId;
// } else if(jQuery.browser.version=="6.0"||jQuery.browser.version=="7.0"||jQuery.browser.version=="8.0") {
// var io = document.createElement(‘‘);
// if(typeof uri== ‘boolean‘){
// io.src = ‘javascript:false‘;
// }
// else if(typeof uri== ‘string‘){
// io.src = uri;
// }
// }
}
else {
var io = document.createElement(‘iframe‘);
io.id = frameId;
io.name = frameId;
}
io.style.position = ‘absolute‘;
io.style.top = ‘-1000px‘;
io.style.left = ‘-1000px‘;
document.body.appendChild(io);
return io;
},
createUploadForm: function(id, fileElementId, data)
{
//create form
var formId = ‘jUploadForm‘ + id;
var fileId = ‘jUploadFile‘ + id;
var form = jQuery(‘
‘);
var oldElement = jQuery(‘#‘ + fileElementId);
var newElement = jQuery(oldElement).clone();
jQuery(oldElement).attr(‘id‘, fileId);
jQuery(oldElement).before(newElement);
jQuery(oldElement).appendTo(form);
if (data) {
for (var i in data) {
$(‘‘).appendTo(form);
}
}
//set attributes
jQuery(form).css(‘position‘, ‘absolute‘);
jQuery(form).css(‘top‘, ‘-1200px‘);
jQuery(form).css(‘left‘, ‘-1200px‘);
jQuery(form).appendTo(‘body‘);
return form;
},
ajaxFileUpload: function(s) {
// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
s = jQuery.extend({}, jQuery.ajaxSettings, s);
var id = s.fileElementId;
var form = jQuery.createUploadForm(id, s.fileElementId,s.data);
var io = jQuery.createUploadIframe(id, s.secureuri);
var frameId = ‘jUploadFrame‘ + id;
var formId = ‘jUploadForm‘ + id;
if( s.global && ! jQuery.active++ )
{
// Watch for a new set of requests
jQuery.event.trigger( "ajaxStart" );
}
var requestDone = false;
// Create the request object
var xml = {};
if( s.global )
{
jQuery.event.trigger("ajaxSend", [xml, s]);
}
var uploadCallback = function(isTimeout)
{
// Wait for a response to come back
var io = document.getElementById(frameId);
try
{
if(io.contentWindow)
{
xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
}else if(io.contentDocument)
{
xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
}
}catch(e)
{
jQuery.handleError(s, xml, null, e);
}
if( xml || isTimeout == "timeout")
{
requestDone = true;
var status;
try {
status = isTimeout != "timeout" ? "success" : "error";
// Make sure that the request was successful or notmodified
if( status != "error" )
{
// process the data (runs the xml through httpData regardless of callback)
var data = jQuery.uploadHttpData( xml, s.dataType );
if( s.success )
{
// ifa local callback was specified, fire it and pass it the data
s.success( data, status );
jQuery(io).unbind();
jQuery(io).remove();
jQuery(form).remove();
};
if( s.global )
{
// Fire the global callback
jQuery.event.trigger( "ajaxSuccess", [xml, s] );
};
} else
{
jQuery.handleError(s, xml, status);
}
} catch(e)
{
status = "error";
jQuery.handleError(s, xml, status, e);
};
if( s.global )
{
// The request was completed
jQuery.event.trigger( "ajaxComplete", [xml, s] );
};
// Handle the global AJAX counter
if(s.global && ! --jQuery.active)
{
jQuery.event.trigger("ajaxStop");
};
if(s.complete)
{
s.complete(xml, status);
} ;
jQuery(io).unbind();
setTimeout(function()
{ try
{
jQuery(io).remove();
jQuery(form).remove();
} catch(e)
{
jQuery.handleError(s, xml, null, e);
}
}, 100);
xml = null;
};
}
// Timeout checker
if( s.timeout > 0 )
{
setTimeout(function(){
if( !requestDone )
{
// Check to see ifthe request is still happening
uploadCallback( "timeout" );
}
}, s.timeout);
}
try
{
var form = jQuery(‘#‘ + formId);
jQuery(form).attr(‘action‘, s.url);
jQuery(form).attr(‘method‘, ‘POST‘);
jQuery(form).attr(‘target‘, frameId);
if(form.encoding)
{
form.encoding = ‘multipart/form-data‘;
}
else
{
form.enctype = ‘multipart/form-data‘;
}
jQuery(form).submit();
} catch(e)
{
jQuery.handleError(s, xml, null, e);
}
if(window.attachEvent){
document.getElementById(frameId).attachEvent(‘onload‘, uploadCallback);
}
else{
document.getElementById(frameId).addEventListener(‘load‘, uploadCallback, false);
}
return {abort: function () {}};
},
uploadHttpData: function( r, type ) {
var data = !type;
data = type == "xml" || data ? r.responseXML : r.responseText;
// ifthe type is "script", eval it in global context
if( type == "script" )
{
jQuery.globalEval( data );
}
// Get the JavaScript object, ifJSON is used.
if( type == "json" )
{
///////////以下为新增代码///////////////
var start = data.indexOf(">");
if(start != -1) {
var end = data.indexOf(");
if(end != -1) {
data = data.substring(start + 1, end);
}
}
///////////以上为新增代码///////////////
}
// evaluate scripts within html
if( type == "html" )
{ try{
jQuery("
文章标题:easyUI前端ajax上传文件组件
文章链接:http://soscw.com/index.php/essay/67184.html