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