jQuery加载器gif和警报消息
我有一个表单,当我点击保存按钮时我想显示一个gif加载器,然后执行一个ajax函数(来自jquery)来调用一个文件来保存表单,如果它成功了,我想删除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('Saved with success.').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 } }); });
所以我需要一些帮助,请找出它为什么不起作用。
尝试
HTML
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(''); // add a gif loader }, success: function (data, textStatus, jqxhr) { alert(JSON.stringify(data)); $('#ajaxLoader-inner img').fadeOut(5000, function () { // remove GIF loader $(this) .replaceWith('' + '' + 'Saved with success.') && $(".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 } }); }); });
下面有一些小调整。 不完全确定您的总体目标是什么,但注意到以下问题:
笔记:
- 对于错误情况,您有
#ajax-loader-inner
而不是#ajaxLoader-inner
。 - 在替换内容之前,您不是在等待淡出。
fadeOut
是异步的,但delay
只会延迟后续动画 ,而不是html()
替换(在fadeOut
开始之前发生)。 我在动画promise
上使用done
进行了延迟,这将在动画队列结束时触发(包括delay
调用)。 在那里使用简单的setTimeout
可能会更好。 - 您需要淡入(或显示)初始加载器,因为它被先前的保存/错误隐藏。
JSFiddle: http : //jsfiddle.net/TrueBlueAussie/WnZ3Y/2/
$("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('Saved with success.').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 } }); });
你需要显示“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 },