Я хочу загрузить файл асинхронно с помощью jQuery – без использования PLUGIN.
JQuery для меня очень новичок, и, посмотрев на различные форумы, я закончил с этим кодом:
<html> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" charset="utf-8"> $(document).ready(function(){ $('#myform').submit(function() { var fileInput = document.getElementById('file'); var file = fileInput.files[0]; var formData = new FormData(); formData.append('file', file); $.ajax({ type: "POST", url: "upload.php", data: formData, processData: false, contentType: 'multipart/form-data', beforeSend: function (x) { if (x && x.overrideMimeType) { x.overrideMimeType("multipart/form-data"); } }, success:function(msg){ //alert( "Data Uploaded: " + msg ); document.getElementById('display').innerHTML = msg; } }); return false; }); }); </script> </head> <body> <form enctype="multipart/form-data" id="myform" name="myform" method="POST"> <input name="file" type="file" id="file" name="file"/> <input type="text" name="txtValue" value="" id="txtValue">--> <input type="submit" value="Upload" id="button" name="button"/> <div id="display"></div> </form> </body> </html>
<?php $uploaddir = './uploads/'; $file = $uploaddir . basename($_FILES['file']['name']); if (move_uploaded_file($_FILES['file']['tmp_name'], $file)) { $value = "success"; } else { $value = "error"; } echo $value; ?>
Этот код не работает, и каждый раз, когда «дисплей» DIV печатает «ошибку». Пожалуйста, помогите мне.
Возьмите скрытый div. Внутри этого div принимают iframe
и устанавливают target
формы на идентификатор iframe.
В jQuery. В после функции готовности документа добавьте обработчик события нагрузки (скажем, LEH) в iframe. Таким образом, когда форма отправляется и файл загружается, а iframe загружается, тогда LEH будет вызван
Это будет действовать как событие успеха.
Примечание: вам нужно сделать небольшие изменения, как в первый раз, когда страница загружается, а также загружается iframe. Таким образом, будет и первая проверка времени.
С HTML5 вы можете сделать загрузку файлов с помощью Ajax и jQuery. Кроме того, вы можете выполнять проверки файлов (имя, размер и тип MIME) или обрабатывать событие прогресса с тегом прогресса HTML5 (или div).
HTML:
<form enctype="multipart/form-data"> <input name="file" type="file" /> <input type="button" value="Upload" /> </form> <progress></progress>
Вы можете сделать некоторую проверку, если хотите.
$(':file').change(function(){ var file = this.files[0]; var name = file.name; var size = file.size; var type = file.type; //Your validation });
Теперь Ajax submit с нажатием кнопки:
$(':button').click(function(){ var formData = new FormData($('form')[0]); $.ajax({ url: 'upload.php', //Server script to process data type: 'POST', xhr: function() { // Custom XMLHttpRequest var myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ // Check if upload property exists myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // For handling the progress of the upload } return myXhr; }, //Ajax events beforeSend: beforeSendHandler, success: completeHandler, error: errorHandler, // Form data data: formData, //Options to tell jQuery not to process data or worry about content-type. cache: false, contentType: false, processData: false }); });
Теперь, если вы хотите обработать прогресс.
function progressHandlingFunction(e){ if(e.lengthComputable){ $('progress').attr({value:e.loaded,max:e.total}); } }
ИСТОЧНИК
Вы можете использовать следующие плагины для загрузки файлов с помощью ajax:
Плагин формы jQuery
Uploadify
Плагин в первой ссылке обеспечивает очень полезные обратные вызовы. Вы можете проверить документацию по данной ссылке.
У меня есть пользовательский JQuery Form Plugin в моем проекте. JQuery необработанный объект xhr завернут в объект jqXhr, который не имеет ссылки на новое свойство загрузки xhr. Надеюсь, вы можете начать с этого нижеприведенного примера. HTML:
<input type="file" class="text-input" size="50" id="file_upload" value="" name="file_upload"/> var formData = new FormData($('form')[0]); $.ajax({ url: '/files/add_file', //server script to process data type: 'POST', xhr: function() { // custom xhr myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ // check if upload property exists //myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload } return myXhr; }, dataType: 'JSON', beforeSend: beforeSendHandler, success: function(data) { if (data.error){ showMessage(data.html, false, false); } else{ showMessage(data.html, false, false); setTimeout("window.location = 'path/to/after/uploading';",450) } }, error: function(data) { showMessage(data.html, false, false); }, // Form data data: formData, //Options to tell JQuery not to process data or worry about content-type cache: false, contentType: false, processData: false });