Bence haklısın. Bu yöntem çok küresel ...
Ancak, AJAX çağrınızın sayfanın kendisi üzerinde hiçbir etkisi olmadığında iyi bir varsayılan değerdir. (örneğin arka plan kaydetme). (her zaman "global" ileterek belirli bir ajax çağrısı için kapatabilirsiniz: false - jquery'deki belgelere bakın
AJAX çağrısı sayfanın bir bölümünü yenilemek istendiğinde, "yükleme" görüntülerimin yenilenen bölüme özgü olmasını seviyorum. Hangi bölümün yenilendiğini görmek istiyorum.
Sadece şöyle bir şey yazabiliyorsanız ne kadar havalı olabileceğini düşünün:
$("#component_to_refresh").ajax( { ... } );
Ve bu, bu bölümde bir "yükleme" gösterecektir. Aşağıda, "yükleme" ekranını da işlediğini yazdığım bir işlev ama ajax'ta yenilediğiniz alana özgü.
Önce, nasıl kullanılacağını göstereyim
<!-- assume you have this HTML and you would like to refresh
it / load the content with ajax -->
<span id="email" name="name" class="ajax-loading">
</span>
<!-- then you have the following javascript -->
$(document).ready(function(){
$("#email").ajax({'url':"/my/url", load:true, global:false});
})
Ve bu işlev - istediğiniz gibi geliştirebileceğiniz temel bir başlangıç. çok esnektir.
jQuery.fn.ajax = function(options)
{
var $this = $(this);
debugger;
function invokeFunc(func, arguments)
{
if ( typeof(func) == "function")
{
func( arguments ) ;
}
}
function _think( obj, think )
{
if ( think )
{
obj.html('<div class="loading" style="background: url(/public/images/loading_1.gif) no-repeat; display:inline-block; width:70px; height:30px; padding-left:25px;"> Loading ... </div>');
}
else
{
obj.find(".loading").hide();
}
}
function makeMeThink( think )
{
if ( $this.is(".ajax-loading") )
{
_think($this,think);
}
else
{
_think($this, think);
}
}
options = $.extend({}, options); // make options not null - ridiculous, but still.
// read more about ajax events
var newoptions = $.extend({
beforeSend: function()
{
invokeFunc(options.beforeSend, null);
makeMeThink(true);
},
complete: function()
{
invokeFunc(options.complete);
makeMeThink(false);
},
success:function(result)
{
invokeFunc(options.success);
if ( options.load )
{
$this.html(result);
}
}
}, options);
$.ajax(newoptions);
};