2009-04-17 8 views
3

verwenden Ich mache eine Web-Anwendung in Grails.In, dass ich remoteFunction in gsp page.It arbeitet jetzt.In diesem "Onloading" -Ereignis möchte ich "showSpinner() aufrufen "javascript function.My Probe gsp-Code ist:Wie onLoading-Ereignis in Grails remoteFunction

<div class="menuButton" onclick="${remoteFunction(action: 'index', controller: 'file',  update: [success: 'ajax', failure: 'ajax'])}"> 
     <label class="menu">File upload</label> 
    </div> 

Kann jemand Hilfe zu diesem Thema liefern.

Antwort

4

Sie können global einen sogenannten Ajax.Responder für das onLoading-Ereignis von Prototyp Ajax-Anfragen registrieren. Dies würde für jeden remoteFunction/Ajax-Aufruf auf Ihrer Seite ausgelöst werden. Zu tun, dass Sie so etwas wie dieses irgendwo in Ihre gsp Seite oder das Layout setzen sollen:

<script type="text/javascript"> 
function showSpinner() { 
    // TODO show spinner 
} 
function hideSpinner() { 
    // TODO hide spinner 
} 
Ajax.Responders.register({ 
    onLoading: function() { 
     showSpinner(); 
    }, 
    onComplete: function() { 
     if(!Ajax.activeRequestCount) hideSpinner(); 
    } 
}); 
</script> 

Sie müssen die showSpinner und hideSpinner Funktion natürlich implementieren. Als komplettes Beispiel könnten Sie so etwas wie verwenden:

<script type="text/javascript"> 
    function showSpinner() { 
     $('spinner').show(); 
    } 
    function hideSpinner() { 
     $('spinner').hide(); 
    } 
    Ajax.Responders.register({ 
     onLoading: function() { 
     showSpinner(); 
     }, 
     onComplete: function() {  
     if(!Ajax.activeRequestCount) hideSpinner(); 
     } 
    }); 
</script> 
<div id="spinner" style="display: none;"> 
    <img src="${createLinkTo(dir:'images',file:'spinner.gif')}" alt="Loading..." width="16" height="16" /> 
</div> 
3

Wenn Sie die JQuery-Plugin verwenden, verwenden Sie diese:

$(document).ready(function() { 
    $("#spinner").bind("ajaxSend", function() { 
     $(this).fadeIn(); 
    }).bind("ajaxComplete", function() { 
     $(this).fadeOut(); 
    })} 
);