我有一个表单,当我点击保存按钮时我想显示一个gif加载器,然后执行一个ajax函数(来自jquery)来调用一个保存表单的文件,如果它是' sa成功,我想删除gif加载器并显示一条消息,表示表单已成功保存。
它并不难......除了我; o)
这里我的代码是小提琴:http://jsfiddle.net/WnZ3Y/
$("button#Save").click(function(){
$.ajax({
type: "POST",
url: "",
data: $('').serialize(),
beforeSend : function() { // JS code processing before calling the AJAX method
$('#ajaxLoader-inner').html('Here my loader GIF'); // add a gif loader
},
success: function(){
$('#ajaxLoader-inner').fadeOut('slow').delay(2000); // remove GIF loader
$('#ajaxLoader-inner').html('<div class="alert alert-success alert-dismissable" id="ajax-loader-message"><i class="fa fa-check"></i><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>Saved with success.</div>').fadeIn('slow').delay(2000).fadeOut('slow'); // add a message to say it's a success
},
error: function(){
alert("Error in ajax."); // alert there is an error
$('#ajax-loader-inner').fadeOut(); // remove GIF loader
}
});
});
所以我需要一些帮助,请找出它为什么不起作用。
答案 0 :(得分:0)
下面的一些小调整。不完全确定您的总体目标是什么,但注意到以下问题:
注意:
#ajax-loader-inner
而不是#ajaxLoader-inner
。 fadeOut
是异步的,但delay
只会延迟后续动画,而不是html()
替换(在fadeOut
开始之前发生)。我在动画done
上使用promise
链接延迟,这将在动画队列结束时触发(包括delay
次调用)。使用简单的setTimeout
可能会更好。$("button#Save").click(function () {
$.ajax({
type: "POST",
url: "",
data: $('').serialize(),
beforeSend: function () { // traitements JS à faire AVANT l'envoi
$('#ajaxLoader-inner').html('Here my loader GIF').fadeIn(); // add a gif loader
},
success: function () {
$('#ajaxLoader-inner').fadeOut('slow').delay(2000).promise().done(function () {
$('#ajaxLoader-inner').html('<div class="alert alert-success alert-dismissable" id="ajax-loader-message"><i class="fa fa-check"></i><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>Saved with success.</div>').fadeIn('slow').delay(2000).fadeOut('slow'); // add a message to say it's a success
});
},
error: function () {
alert("Error in ajax."); // alert there is an error
$('#ajaxLoader-inner').fadeOut(); // remove GIF loader
}
});
});
答案 1 :(得分:0)
你需要显示“ajaxLoader-inner”DIV:
beforeSend : function() { // traitements JS à faire AVANT l'envoi
$('#ajaxLoader-inner').show();
$('#ajaxLoader-inner').html('Here my loader GIF'); // add a gif loader
},
答案 2 :(得分:0)
尝试
HTML
<form id="ajaxLoader">
<div id="ajaxLoader-inner"></div>
<input id="inputs" name="saved" type="text" placeholder="save" />
<input type="button" id="Save" value="click" />
</form>
JS
$(function () {
$("#Save").click(function (e) {
e.preventDefault();
var _data = $("#ajaxLoader input[type=text]").val();
return $.ajax({
type: "POST",
url: "/echo/json/",
data: {
json: JSON.stringify({"saved" : _data})
},
beforeSend: function () { // traitements JS à faire AVANT l'envoi
$('#ajaxLoader-inner')
.html('<img src=http://upload.wikimedia.org/'
+ 'wikipedia/commons/thumb/d/d3/'
+ 'Newtons_cradle_animation_book_2.gif/'
+ '200px-Newtons_cradle_animation_book_2.gif />'); // add a gif loader
},
success: function (data, textStatus, jqxhr) {
alert(JSON.stringify(data));
$('#ajaxLoader-inner img').fadeOut(5000, function () { // remove GIF loader
$(this)
.replaceWith('<div class="alert alert-success alert-dismissable"'
+ ' id="ajax-loader-message">'
+ '<i class="fa fa-check"></i>'
+ '<button type="button" class="close"'
+ ' data-dismiss="alert" aria-hidden="true">×'
+ '</button>Saved with success.</div>')
&& $(".alert").fadeIn(0).fadeOut(3700)
.parent().siblings("#inputs").val("");
}) // add a message to say it's a success
},
error: function () {
alert("Error in ajax."); // alert there is an error
$('#ajax-loader-inner').fadeOut(); // remove GIF loader
}
});
});
});