Eh oui, il y a mais c'est plutôt compliqué. La seule façon que j'ai trouvé est d'utiliser un iframe sur le client, et response.writeing sur le serveur pour renvoyer des blocs de javascript au client, ce javascript appelle sur la fenêtre parent pour traiter les messages d'état.
Voici un exemple de code. Il peut y avoir des problèmes avec ça, je l'arrache d'une application beaucoup plus grande.
html:
<button id="doStuff">
<div id="status"></div>
<div id="iframeHolder"></div>
javascript:
//This one will be called from the HTML the javascript is streaming back
function updateStatus(message) {
$('#status').html(message);
}
$('#doStuff').click(function(event) {
event.preventDefault();
var url="your.page.html";
$('#iframeHolder').html('<iframe src="' + url + '"></iframe>');
}
côté serveur
(ce qui est vb asp.net, mais vous devriez être en mesure de le faire dans la langue de votre choix):
dim message as string = "hello world"
dim script = String.Format("<script type='text/javascript'>parent.updateStatus('{0}');</script>",message)
Response.Write(script)
Response.Flush()
Quelques observations
- Querystring sera votre ami ici. Je ne suis pas sûr si vous pouvez programmer postback à un iframe
- Vous devrez probablement ajouter un peu de poubelle cachebusting à la chaîne de requête, sinon le navigateur mettra plus que probablement en cache le contenu. Ce sera très très rapide, mais faux :-)
- Il se peut que vous deviez envoyer un "html" avant que le navigateur ne commence à traiter le contenu iframe. J'ai trouvé que l'envoi d'un commentaire HTML d'environ 1k d'ordures aide
- Pour éviter les problèmes d'actualisation dans FF, et les problèmes de "chargement permanent" dans chrome et safari, définissez le src iframe à environ: vide une fois que vous avez terminé (
$('#iframeHolder iframe').attr('src','about:blank')
)
- la barre de progression jQuery UI semble assez chic pour afficher le traitement pour cent
espoir qui aide. Je me suis déchiré la tête il ya quelques mois :-)
vous voudrez peut-être ajouter une réponse .Flush() à la fin, de sorte qu'il est envoyé directement au navigateur au lieu d'attendre – LucasS
@LucasS bon appel –