2009-06-24 9 views
2

Essayez de nouveau. Ne pense pas que j'ai posé une question clairement.Problème de blocage avec AJAX à l'aide de JQuery

J'ai un gros problème. La société avec laquelle je suis en contrat m'a demandé de convertir le site pour retarder le chargement en utilisant AJAX. Pour ce faire, j'utilise les méthodes Page pour charger les contrôles. Javascript ressemble à ceci ... Fonctionne comme un champion!

$(document).ready(function() { 

     var clientID = '#' + '<%= BackUpPower.DivBackUpPower.ClientID %>' 

     if ($(clientID)) { 

      $.ajax({ 
       type: "POST", 
       url: "Dashboard.aspx/GetBackUpControl", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       timeout: 15000, 
       success: function(result) { 
        $(clientID).css({ "display": "none" }); 
        $(clientID).removeClass('loading'); 
        $(clientID).attr('innerHTML', result.d); 
        $(clientID).fadeIn("slow"); 
       }, 
       error: function(xhr) { 
        //alert("GetBackUpControl failed"); 
       } 
      }); 
     } 

});

Code côté serveur ressemble à ceci ...

[WebMethod]

public static String GetBackUpControl() 
{ 

    Page page = new Page(); 
    UserControls_BackupPowerForm ctl = (UserControls_BackupPowerForm)page.LoadControl("~/UserControls/BackupPowerForm.ascx"); 
    ctl.ID = "BackupPower"; 
    page.Controls.Add(ctl); 

    ctl.HostPage = "Dashboard"; 
    ctl.ActiveTimeRange = TimeRange.LastMonth; 

    try 
    { 
     ctl.DataBindChart(); 
    } 
    catch (Exception caught) 
    { 
     LoggingAdapter.LogError(caught.Message, "Error Generating Chart", caught); 
     return String.Empty; 
    } 

    StringWriter writer = new StringWriter(); 
    HttpContext.Current.Server.Execute(page, writer, false); 

    return writer.ToString(); 
} 

Problème Je vais avoir est quand une longue rappel en cours d'exécution est en cours et l'utilisateur essaie de changer de page en cliquant sur lien hypertexte, le système attend longtemps avant de le faire. Passer à travers le code, je vois callback est corrigé avorté sur la nouvelle demande de page et le gestionnaire d'erreur JQuery appelé, mais semble toujours comme nouvelle demande de page attend la fin du rappel. Si aucun rappel n'est en cours, la nouvelle demande de page est instantanée. Quelqu'un sait ce qui se passe?

+0

Il ya une question similaire mais pas très bien répondu ici: http://stackoverflow.com/questions/806184/jquery-ajax-post-blocking-form-submit – karim79

Répondre

2

Merci pour votre aide. Le problème des problèmes de sortie est lié à la façon dont asp.net sérialise les demandes de page qui accèdent aux sessions pour éviter les conflits de mise à jour. Définir des sessions à "readonly" dans le problème résolu de la directive page. Cependant, si la page écrit des variables de sessions, cela posera problème. Une solution de contournement pour cela consiste à traverser la publication sur une autre page qui permet des mises à jour de session.