мне кажется сложная задача. Есть файл create_page.html
| Код | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Админцентр</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="expires" content="-1"> <meta name="robots" content="index,nofollow"> <link href="s01_admin_css.css" type="text/css" rel="stylesheet"> <link href="ubr.css" type="text/css" rel="stylesheet"> <script type="text/javascript" src="../cms_s01_libs/jquery/jquery.js"></script> <script type="text/javascript" src="../cms_s01_libs/jquery/jquery.form.js"></script> <script type="text/javascript" src="../cms_s01_libs/jquery/ajaxfileupload.js"></script> <script type="text/javascript" src="../cms_s01_libs/tiny_mce/tiny_mce_gzip.js"></script> <script type="text/javascript"> unction ajaxFileUpload() { $("#progress_upload") .ajaxStart(function(){ $(this).show(); }) .ajaxComplete(function(){ $(this).hide(); }); $("#upload_file_button").ajaxStart(function(){ $(this).hide(); }).ajaxComplete(function(){ $(this).show(); });
$.ajaxFileUpload({ url:'s01_admin_handlers_ajax/upload_file.php', secureuri:false, fileElementId:'upload_file', dataType: 'json', success: function (data, status) { if(data.error != '') { //alert(data.error); $("#output_upload").empty().show().append(data.error); } else { //alert(data.mess); $("#output_upload").empty().show().append(data.mess); } }, error: function (data, status, e) { alert(e); } }) return false; } </script> </head> <body> <form action="s01_admin_handlers_ajax/create_page.php" method="post" id="mySettings" enctype="multipart/form-data"> <input type="file" name="upload_file" id="upload_file" class="input_admin_100" /> <input type="hidden" name="MAX_FILE_SIZE" value="20000000"> <div id="button_upload"><input type="button" id="upload_file_button" name="upload_file_button" class="admin_button" value="Upload" onclick="return ajaxFileUpload();" />
<select name="upload_dst_dir" id="upload_dst_dir" class="input_admin"> <option value="0" selected="selected">---</option> <option value="upload_audio">upload_audio</option> <option value="upload_files">upload_files</option> <option value="upload_images">upload_images</option> <option value="upload_video">upload_video</option> </select></form> </html>
|
Содержание файла ajaxfileupload.js
| Код |
jQuery.extend({
createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />'); 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) { //create form var formId = 'jUploadForm' + id; var fileId = 'jUploadFile' + id; var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>'); var oldElement = $('#' + fileElementId); var newElement = $(oldElement).clone(); $(oldElement).attr('id', fileId); $(oldElement).before(newElement); $(oldElement).appendTo(form); //set attributes $(form).css('position', 'absolute'); $(form).css('top', '-1200px'); $(form).css('left', '-1200px'); $(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 = new Date().getTime() var form = jQuery.createUploadForm(id, s.fileElementId); var io = jQuery.createUploadIframe(id, s.secureuri); var frameId = 'jUploadFrame' + id; var formId = 'jUploadForm' + id; // Watch for a new set of requests if ( s.global && ! jQuery.active++ ) { jQuery.event.trigger( "ajaxStart" ); } var requestDone = false; // Create the request object var xml = {} if ( s.global ) jQuery.event.trigger("ajaxSend", [xml, s]); // Wait for a response to come back var uploadCallback = function(isTimeout) { 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 a local callback was specified, fire it and pass it the data if ( s.success ) s.success( data, status ); // Fire the global callback if( s.global ) jQuery.event.trigger( "ajaxSuccess", [xml, s] ); } else jQuery.handleError(s, xml, status); } catch(e) { status = "error"; jQuery.handleError(s, xml, status, e); }
// The request was completed if( s.global ) jQuery.event.trigger( "ajaxComplete", [xml, s] );
// Handle the global AJAX counter if ( s.global && ! --jQuery.active ) jQuery.event.trigger( "ajaxStop" );
// Process result if ( s.complete ) s.complete(xml, status);
jQuery(io).unbind()
setTimeout(function() { try { $(io).remove(); $(form).remove(); } catch(e) { jQuery.handleError(s, xml, null, e); }
}, 100)
xml = null
} } // Timeout checker if ( s.timeout > 0 ) { setTimeout(function(){ // Check to see if the request is still happening if( !requestDone ) uploadCallback( "timeout" ); }, s.timeout); } try { // var io = $('#' + frameId); var form = $('#' + formId); $(form).attr('action', s.url); $(form).attr('method', 'POST'); $(form).attr('target', frameId); if(form.encoding) { form.encoding = 'multipart/form-data'; } else { form.enctype = 'multipart/form-data'; } $(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; // If the type is "script", eval it in global context if ( type == "script" ) jQuery.globalEval( data ); // Get the JavaScript object, if JSON is used. if ( type == "json" ) eval( "data = " + data ); // evaluate scripts within html if ( type == "html" ) jQuery("<div>").html(data).evalScripts(); //alert($('param', data).each(function(){alert($(this).attr('value'));})); return data; } })
|
Ну понятно, что вот тут задаются параметры:
url:'s01_admin_handlers_ajax/upload_file.php', secureuri:false, fileElementId:'upload_file', dataType: 'json',
Так вот эта штука работает, хорошо работает, но, она сделана так, что передаёт только файл и всё. А по html файлу видно, что там есть селект, где выбирается название папки куда загружать этот рисунок. И он соотв. уже идёт в перемиенной POST, если в php его ловить. Помогите пожалуйста дописать этот плагин, что бы можно было вместе с полем file передать ещё хотя бы одно поле type="text" и что бы оно пришло в php файл. |