2014-12-05 64 views
0

我在這個問題上陷入了相當長的一段時間。建議需要...使用AJAX和.net Web服務進行異步處理

好吧,我有這個ASPX測試服務頁面(AJAX)

<script type="text/javascript"> 
    $(document).ready(function() {  
     $('#btnTest').click(function() { 
      $('#btnTest').hide(); 
      $.ajax({ 
       type: 'POST', 
       url: "request.asmx/newSync", 
       data: '', 
       contentType: 'application/json; charset=utf-8', 
       dataType: 'json', 
       complete: function() { 
        $('#btnTest').show(); 
       }, 
       failure: function (msg) { 
        $('#result').text(msg); 
        //alert(msg); 
       } 
      }); 
     }); 
    }); 
</script> 

Web服務

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

[ScriptService] 
public class test_request : System.Web.Services.WebService 
{ 

public test_request() { 


} 

[WebMethod(EnableSession = true)] 
public SyncAsync newSync() 
{ 
    var response = new SyncAsync(); 

    //Test Processing 
    System.Threading.Thread.Sleep(5000); 

    try 
    { 
     response.Status = "Done"; 
     return response; 
    } 
    catch (Exception ex) 
    { 
     response.Status = "error"; 
     response.ErrorMessage = ex.Message; 
     ErrorSignal.FromCurrentContext().Raise(ex); 
    } 

    return response; 
} 

} 

好我的問題是這樣的......這是異步? ...意思是當我點擊它發送請求的按鈕時,我不會等待web服務返回的任何響應...?

有人可以解釋一下嗎?

謝謝

+1

你javascipr是異步,它不會發送請求塊並在響應返回,將火'complete'或'failure'回調。 – 2014-12-05 11:27:01

+1

注意它是'錯誤:'而不是'失敗:'對於任何ajax錯誤。 – 2014-12-05 11:28:57

回答

1

這是異步並且所有排隊的請求後,立即處理你:)

你的AJAX調用返回。

它指定complete:回調函數被調用時,從服務器的響應返回,或者error:(不failure)如果在服務器上發生錯誤。

在此期間,您的瀏覽器/客戶端代碼一直忙於處理多個執行循環。

+0

謝謝@TrueBlueAussie。如我錯了請糾正我。這是我的情況,我想計算每年的帳單。好吧,現在,一旦我點擊運行按鈕,一個請求已經發生,意味着它將在後臺運行計費(我沒有在這裏添加代碼,讓我們想象一下)?它是否正確? – 2014-12-05 11:36:25

+0

@Gopinath Koothaperumal:是的。如果您使用像Fiddler2或Chrome F12網絡面板這樣的工具,您可以看到請求/響應的時間「相對」慢(需要很長時間),但客戶端瀏覽器代碼只是繼續運行。 – 2014-12-05 11:37:37

+0

謝謝你洙多......將接受一個答案年評論...我清楚現在... – 2014-12-05 11:39:10

0

是,jQuery的Ajax調用默認異步的。

如果您需要同步請求,異步選項設置爲false:

<script type="text/javascript"> 
$(document).ready(function() {  
    $('#btnTest').click(function() { 
     $('#btnTest').hide(); 
     $.ajax({ 
      type: 'POST', 
      async: false 
      url: "request.asmx/newSync", 
      data: '', 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      complete: function() { 
       $('#btnTest').show(); 
      }, 
      failure: function (msg) { 
       $('#result').text(msg); 
       //alert(msg); 
      } 
     }); 
    }); 
}); 

+0

決不重複*從未*,建議'異步:FALSE'作爲解決*任何東西*。總是鼓勵使用* async *默認模式:) – 2014-12-05 11:36:32

+0

是的我知道,你是對的,但它是一個選項,他不知道jQuery Ajax調用如何工作,這是他們的選擇 – 2014-12-05 11:45:58

1

在我的理解,我們需要定義異步什麼? 請求或Web服務

使從jQuery的需要設置AJAX設置異步調用。 默認情況下異步是真實的。

使異步Web服務需要實現爲您服務

IAsyncResult的BeginOperation 對象EndOperation 方法,所以我的想法是,你的Web服務是同步的,但Ajax請求的異步。