2014-12-05 35 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请求的异步。