2009-09-03 6 views
0

Lorsque l'utilisateur clique sur un lien pour générer un rapport, je fais un appel AJAX qui génère un fichier pdf en arrière-plan. Maintenant, les fichiers sont énormes en cours d'exécution jusqu'à 10mb ou plus.Ainsi, cela prend du temps. temps, l'utilisateur devrait être en mesure de naviguer d'autres liens comme si rien ne s'est passé. Donc je dois mettre en œuvre de telle sorte que le processus de génération pdf commence & l'utilisateur n'a pas à attendre la fin du processus.Est-ce possible? J'utilise AJAX Pro avec C# avec dot net framework 2.0Filetage en utilisant AJAX

Le problème ici est que dès que l'activité AJAX commence le navigateur entre dans une phase bloquée & l'utilisateur doit attendre bien qu'il clique sur un lien différent.

Répondre

2

Je probablement créer une « file d'attente » ou une « boîte de réception » pour l'utilisateur ...

commencer votre routine de génération de pdf avec un ThreadPool.QueueUserWorkItem (vous devrez également modifier votre méthode de génération en sortie leur boîte de réception)

puis sur chaque requête http vérifier que la boîte de réception et informer l'utilisateur de l'élément ... vous pouvez toujours interroger le serveur sur un intervalle ou somthing

0

Bien sûr, mais une fois que l'utilisateur accède à une autre page, le Javascript qui attend la réponse Ajax n'est plus en cours d'exécution, de sorte que la demande est perdue. Vous devez soit trouver un moyen de garder cette page ouverte (en utilisant des cadres ou exclusivement la navigation Ajaxified), ou trouver un moyen de stocker la réponse et informer l'utilisateur de son achèvement sur la page suivante. Par exemple, stocker une variable de session qui indique que l'opération est terminée ou la stocker dans une base de données avec (peut-être) une valeur booléenne "non lue".

+0

vrai problème est mon .Mais le navigateur ici entre en scène et hung l'utilisateur a finalement wait.I à détacher it.Also la réponse ne me sert à rien. – Janmejay

+0

Ah, dans ce cas, vous avez besoin d'un fil de travail. Jetez un coup d'œil à la réponse d'ObeseCoder ci-dessous, car l'exécution d'ASP.NET engendrera un thread séparé pour effectuer l'opération et laissera le thread principal revenir sans attendre la fin de l'opération. – JoshJordan

0

vous pouvez avoir appel asynchrone Ajax avec lequel vous pouvez faire d'autres tâches pendant que les objets de réponse reviennent de la page Ajax. Voici quelques exemples, testAjax.aspx est la page Ajax ici:

http_request.onreadystatechange = function() { alertContents(http_request); }; 
http_request.open('GET', 'testAjax.aspx?', true); 
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
http_request.send(null); 

function alertContents(http_request) 
{//debugger; 
    if (http_request.readyState == 4) 
    { 
     if (http_request.status == 200) 
     { 
      var vResult; 
      vResult=http_request.responseText;  
      //Write your logic after successful Ajax call here.     
     } 
     else 
     { 
      alert('There was a problem with the request.'); 
     } 
    } 
}