Я использую плагин формы jQuery для загрузки файла и отображения индикатора выполнения.
код JS:
var bar = $('.bar');
var percent = $('.percent');
var status = $('#status');
var options = {
target: '.result',
url: 'slider_insert_now.php',
beforeSend: function() {
var img_file = $.trim($(".img_file").val());
if(img_file==$.trim('')){
$(".result").html('<span class="error">No file selected</span>');
return false;
}else{
status.empty();
var percentVal = '0%';
bar.width(percentVal)
percent.html(percentVal);
return true;
}
},
uploadProgress: function(event, position, total, percentComplete) {
var percentVal = percentComplete + '%';
bar.width(percentVal)
percent.html(percentVal);
},
success: function() {
var percentVal = '100%';
bar.width(percentVal)
percent.html(percentVal);
},
complete: function(xhr) {
status.html(xhr.responseText);
}
};
$('#form_upload').ajaxForm(options);
И HTML:
<div class="result"></div>
<form id="form_upload" action="javascript:void(0)" method="POST" enctype="multipart/form-data">
<div class="progress">
<div class="bar"></div>
<div class="percent">0%</div>
</div>
<div id="status"></div>
<input type="file" value="" name="img_file" class="img_file" />
<br></br>
<input type="submit" value="Upload the Image" />
</form>
в функции beforeSend
я использовал return false
чтобы предотвратить beforeSend
формы. Но это не работает. Как я могу это достичь?
В вашем html удалите javascript: void (0) и положите # вместо этого и используйте event.preventDefault(); где когда-либо вы запускаете отправку. Что-то вроде этого:
$(document).on('click', '#submitname', function (event) {
event.preventDefault();
$.ajax({
url: 'somepage.php',
type: 'post',
dataType:'html',
data: $('#formname').serialize(),
success: function(response, textStatus, jqXHR){
///Do something
},
error: function(jqXHR, textStatus, errorThrown){
console.log('error(s):'+textStatus, errorThrown);
}
});
});
Чтобы прервать текущий запрос "in run", вам необходимо его прервать;) Внутри обратного вызова beforeSend первым параметром является объект jqXHR:
beforeSend: function(jqXHR) {
//some other code to check if we need to abort current request, if so...
jqXHR.abort();
}