가짜 ajax 업로드 파일
8153 단어 Ajax
인터넷 에서 검색 해 보 니 대부분의 방법의 input file 컨트롤 이 form 에 국한 되 어 있 습 니 다. form 밖 이 라면?
임시 form 과 임시 iframe 을 동적 으로 생 성 해 야 합 니 다. action 은 업로드 파일 URL 을 가리 키 고 target 은 임시 iframe 을 가리 키 며 form 에서 file 컨트롤 을 생 성 해 야 합 니 다.
그러나 안전 을 고려 하여 file 컨트롤 은 읽 기만 하고 value 값 을 동적 으로 설정 할 수 없 기 때문에 임시 form 에서 생 성 된 file 컨트롤 은 사용자 가 수 동 으로 조작 하지 않 는 한 해당 파일 을 연결 할 수 없습니다.
이때, 나 는 jquery 의 clone 방법 이 생각 났 다. 그래서 나 는 다음 과 같은 코드 를 썼 다.
var $cloneFile = $file.clone(true);
$cloneFile.removeAttr("id").appendTo($("#FILE_UPLOAD_TEMPFORM"));
테스트 결과 배경 에서 받 은 파일 이 영원히 비어 있 는 것 을 발견 하고 jquery 의 clone 방법 이 file 컨트롤 에 도 어 쩔 수 없다 는 것 을 알 게 되 었 습 니 다. 생각해 보 니 일리 가 있 는 지, 아니면 안전 에 기반 한 것 인지 알 게 되 었 습 니 다.
한 번 의 사 고 를 통 해 저 는 다음 과 같은 방법 을 생각 했 습 니 다. 역시 jquery 의 clone 을 바탕 으로 조정 을 했 습 니 다.
// file
var $cloneFile = $file.clone(true);
// file form
// file file
$file.hide().after($cloneFile).removeAttr("id").appendTo($("#FILE_UPLOAD_TEMPFORM"));
나 는 가장 원시 적 인 file 컨트롤 을 임시 form 으로 옮 겼 고 복 제 된 것 을 원래 의 위치 로 대체 했다.
테스트, OK, 해결!다음은 모든 JS 코드 입 니 다. sea. js 기반 입 니 다.
/**
* @author weeksun23
* @date 2013-08-07 23:20
* @description , file URL
* @param $file file jquery
* @param uploadUrl URL
* @param type (jpg|gif|bmp|jpeg)
* @param callback
* @dependency jquery
* @extra 3 HTML ID:FILE_UPLOAD_TEMPDV FILE_UPLOAD_TEMPFORM FILE_UPLOAD_TEMPFRAME
*/
define(function(require, exports, module) {
function FileUpload($file,uploadUrl,type,callback){
this.$file = $file;
this.uploadUrl = uploadUrl;
this.type = type || null;
this.callback = $.extend({
complete : function(response) {}, //
beforeUpload : function(fileName) {}, // , false
afterUpload : function() {} //
},callback);
}
FileUpload.prototype.upload = function(){
var $file = this.$file,
filePath = $file.val(),
type = this.type,
fileFullName = filePath.substring(filePath.lastIndexOf("\\") + 1);
if(!filePath) return false;
if(type !== null){
var ext = fileFullName.substring(fileFullName.lastIndexOf(".") + 1);
if(type.indexOf(ext) === -1) return false;
}
var callback = this.callback;
if(callback.beforeUpload.call(this,fileFullName) === false) return false;
$("body").append(["<div id='FILE_UPLOAD_TEMPDV' style='display:none;'>",
"<form id='FILE_UPLOAD_TEMPFORM' enctype='multipart/form-data' method='post' action='",
this.uploadUrl,"' target='FILE_UPLOAD_TEMPFRAME'>",
"</form>",
"<iframe id='FILE_UPLOAD_TEMPFRAME' name='FILE_UPLOAD_TEMPFRAME'></iframe>",
"</div>"].join(""));
$("#FILE_UPLOAD_TEMPFRAME").on("load",function(){
var response = this.contentWindow.document.body.innerHTML;
callback.complete(response);
$(this).off("load");
$("#FILE_UPLOAD_TEMPDV").remove();
});
// file
var $cloneFile = $file.clone(true);
// file form
// file file
$file.hide().after($cloneFile).removeAttr("id").appendTo($("#FILE_UPLOAD_TEMPFORM"));
this.$file = $cloneFile;
$("#FILE_UPLOAD_TEMPFORM").submit();
callback.afterUpload.call(this);
//
return true;
};
module.exports = FileUpload;
});
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
원생 Ajax와 jQuery Ajax의 차이점 예시 분석선언: 이번에 소개한 것은 aax와 백그라운드를 이용하여 데이터 교환을 하는 작은 예이기 때문에 demo는 서버를 통해 열어야 합니다.서버 환경은 구축하기 매우 좋다. 인터넷에서wamp나xampp를 다운로드하여 한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.