我有以下div,
<div id="mainoutput">
<img src="/img/preloader.gif" alt="loading" class="preloader" />
</div>
我的AJAX / Jquery的开头是,
$(document).ready(function() {
$(".preloader").hide();
$("#button").click(function() {
$(".preloader").slideToggle( "slow" );
var host = $("#hostinput").val();
var record = $("#recordinput").val();
$.ajax({
url : "/cachecheck_ajax",
type : "POST",
dataType: "json",
data : {
hostinput : host,
recordinput : record,
csrfmiddlewaretoken: '{{ csrf_token }}'
},
success: function(json){
do some stuff...
$(".preloader").slideToggle( "slow" );
$('#mainoutput').html(table).hide().slideToggle( "slow" );
一切正常。我点击提交,预加载器显示,直到我的ajax成功开始,preloader被toogled并显示我的主div(#mainoutput)。
但是,如果我想再次提交,我希望#mainoutput被切换(隐藏),然后预加载器再次显示。这样做的最佳方法是什么?
我确实尝试了以下但是它刚刚完成了打破ajax而我的json刚刚返回,
$(document).ready(function() {
$(".preloader").hide();
$("#button").click(function() {
// addition
if($('#mainoutput').is(':visible'));{
$("#mainoutput").slideToggle( "slow" ).html();
}
//
$(".preloader").slideToggle( "slow" );
var host = $("#hostinput").val();
var record = $("#recordinput").val();
$.ajax({
答案 0 :(得分:0)
我会使用jQuery.Ajax的beforeSend和Complete回调方法。我希望下面的代码可以帮到你!
$(document).ready(function() {
var xhr = null;
$(".preloader").hide();
$("#button").click(function() {
var host = $("#hostinput").val();
var record = $("#recordinput").val();
if (xhr != null) {
xhr.abort(); //Abort Existing XHR Call
$(".preloader").hide(); //By Default hide the Element
}
//Get Referance in xhr variable
xhr = $.ajax({
url : "/cachecheck_ajax",
type : "POST",
dataType: "json",
data : {
hostinput : host,
recordinput : record,
csrfmiddlewaretoken: '{{ csrf_token }}'
},
beforeSend: function (jqXHR, settings) {
$(".preloader").slideToggle( "slow" ); //Before sending to Server, Show the Element
},
success: function(json, textStatus, jqXHR) {
//TODO: Do some stuff...!!!
$('#mainoutput').html(table).hide().slideToggle( "slow" );
},
error: function (jqXHR, textStatus, errorThrown) {
//TODO: Handle Errors here...!!!
},
complete: function (jqXHR, textStatus) {
//jQuery will delegate call after XHR. So Hide the Element
$(".preloader").slideToggle( "slow" );
}
});
});
});