2009-06-24 8 views
2

Try'n again。私は明らかに質問を述べたとは思わない。JQueryを使用したAJAXのブロック問題

大きな問題がありました。私はAJAXを使用して読み込みを遅延させるためにサイトを変換するよう依頼していました。これを行うために、コントロールを読み込むためにPageメソッドを使用しています。 Javascriptはこのように見えます...チャンピオンのように動作します!

$(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"); 
       } 
      }); 
     } 

});

サーバー側のコードは、長時間実行されているコールバックが進行中であり、ユーザーがクリックすることでページを切り替えるしようとしたときに私がいる

[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(); 
} 

問題がある...このようになりますハイパーリンク、システムはそうする前に長い時間待つ。コードをステップ実行するコールバックは新しいページリクエストとJQueryエラーハンドラでは強制的に中止されますが、新しいページリクエストがコールバックが完了するのを待っているようです。進行中のコールバックがない場合、新しいページ要求は瞬間です。誰が何が起こっているのか知っていますか?

+0

よく似たような回答ですが、あまりよくない質問があります:http://stackoverflow.com/questions/806184/jquery-ajax-post-blocking-form-submit – karim79

答えて

2

ありがとうございました。ターンアウトの問題は、asp.netがセッションにアクセスするページ要求をシリアル化して更新の競合を防止する方法と関係していました。ページ指示文でsesssionsを "readonly"に設定すると、問題が解決しました。しかし、ページがセッション変数を書き込むと、これが問題になります。これを回避するには、セッションを更新できる別のページに投稿をクロスすることです。