Saya pikir kamu benar. Metode ini terlalu global ...
Namun - ini adalah standar yang baik untuk saat panggilan AJAX Anda tidak berpengaruh pada halaman itu sendiri. (save latar misalnya). (Anda selalu dapat mematikannya untuk panggilan ajax tertentu dengan mengirimkan "global": false - lihat dokumentasi di jquery
Ketika panggilan AJAX dimaksudkan untuk menyegarkan bagian dari halaman, saya suka gambar "memuat" saya untuk spesifik ke bagian yang di-refresh. Saya ingin melihat bagian mana yang disegarkan.
Bayangkan betapa kerennya jika Anda bisa menulis sesuatu seperti:
$("#component_to_refresh").ajax( { ... } );
Dan ini akan menunjukkan "memuat" pada bagian ini. Di bawah ini adalah fungsi yang saya tulis yang menangani tampilan "memuat" juga tetapi khusus untuk area yang Anda refresh di ajax.
Pertama, izinkan saya menunjukkan kepada Anda bagaimana menggunakannya
<!-- 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});
})
Dan ini adalah fungsinya - awal dasar yang dapat Anda tingkatkan sesuai keinginan. ini sangat fleksibel.
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);
};