C# 使用AJAX和.NETWeb服务进行异步处理

C# 使用AJAX和.NETWeb服务进行异步处理,c#,jquery,asp.net,ajax,asynchronous,C#,Jquery,Asp.net,Ajax,Asynchronous,这个问题困扰了我很长一段时间。需要建议 好的,我有这个ASPX测试服务页面(AJAX) 好的,我的问题是…这是异步的吗?…意思是当我点击按钮时,它会发送请求,我不会等待Web服务的任何响应 有人能解释一下吗 谢谢您它是异步的,完全为您处理:) ajax调用在请求排队后立即返回 它被指定为complete:当响应从服务器返回时调用回调,或者错误:(而不是故障)如果服务器上发生错误 与此同时,您的浏览器/客户端代码一直忙于处理多个执行循环。是的,默认情况下jQuery ajax调用是异步的 如果需要

这个问题困扰了我很长一段时间。需要建议

好的,我有这个ASPX测试服务页面(AJAX)

好的,我的问题是…这是异步的吗?…意思是当我点击按钮时,它会发送请求,我不会等待Web服务的任何响应

有人能解释一下吗


谢谢您

它是异步的,完全为您处理:)

ajax调用在请求排队后立即返回

它被指定为
complete:
当响应从服务器返回时调用回调,或者
错误:
(而不是
故障
)如果服务器上发生错误


与此同时,您的浏览器/客户端代码一直忙于处理多个执行循环。

是的,默认情况下jQuery ajax调用是异步的

如果需要同步请求,请将async选项设置为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);
            }
        });
    });
});

$(文档).ready(函数(){
$('#btnTest')。单击(函数(){
$('btnTest').hide();
$.ajax({
键入:“POST”,
异步:false
url:“request.asmx/newSync”,
数据:“”,
contentType:'application/json;charset=utf-8',
数据类型:“json”,
完成:函数(){
$('btnTest').show();
},
故障:功能(msg){
$(“#结果”).text(msg);
//警报(msg);
}
});
});
});

据我所知,我们需要定义异步什么? 请求或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;
}

}
要从jquery进行异步调用,需要设置ajax设置。 默认情况下,Async为true

要创建异步Web服务,您需要实现 IAsyncResult开始操作 对象内操作 为您服务的方法


所以我的想法是,您的Web服务是同步的,但ajax请求是异步的。

您的javascipr是异步的,它不会阻止发送请求,当响应返回时,它将触发
complete
failure
回调。请注意,对于任何ajax错误,它是
错误:
,而不是
失败:
。谢谢@TrueBlueAussie。如果我错了,请纠正我。这是我的设想,我想计算每年的账单。好的,现在我单击run按钮后,已经发出了一个请求,这意味着它将在后台运行账单(我没有在这里添加代码,让我们想象一下)?这是正确的吗?@Gopinath Koothaperumal:是的。如果您使用诸如Fiddler2或Chrome F12网络面板之类的工具,您可以看到请求/响应的时间“相对”缓慢(需要相当一小部分秒),但客户端浏览器代码只是继续运行。决不,决不重复,建议将
async:false
作为任何问题的解决方案。总是鼓励使用异步默认模式:)是的,我知道,你是对的,但这是一个选项,他不知道jQueryAjax调用如何工作,这是他们的一个选项
<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);
            }
        });
    });
});