我已经创建了一个web服务,调用来自jquery ajax函数。但即使 async 设置为true,它也不会异步工作..
我的ASP.NET网络服务代码
<System.Web.Services.WebMethod()> _
Public Shared Function sampleService(ByVal ttid As String) As String
Threading.Thread.Sleep(5 * 1000)
Return "Hello World"
End Function
JQuery Call脚本
<script language="javascript">
$(function() {
var tempParam = {
ttid: 100
};
var param = $.toJSON(tempParam);
$.ajax({
type: "POST",
url: "testservice.aspx/sampleService",
data: param,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
error: function() {
alert("Error");
},
success: function(msg) {
alert("Success")
alert(msg.d)
}
});
}); </script>
这里我将其设置为async = true。即便如此,我在5秒钟后收到成功消息。这意味着不是异步的。我相信如果async = true,它将不会等待来自webserivice的消息。这实际上是我的要求。
答案 0 :(得分:3)
成功功能是回调;它被设计成在收到响应后被调用。如果在服务器线程执行完成之前调用它,您如何确定成功或错误?对Sleep的调用会暂停当前服务器线程,因此您的响应当然需要五秒钟才能恢复。
异步部分将应用于直接跟随您的ajax帖子的Javascript代码。例如:
<script language="javascript">
$(function() {
var tempParam = {
ttid: 100
};
var param = $.toJSON(tempParam);
$.ajax({
type: "POST",
url: "testservice.aspx/sampleService",
data: param,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
error: function() {
alert("Error");
},
success: function(msg) {
alert("Success")
alert(msg.d)
}
});
alert('This alert is asynchronous! We do not know yet if the ajax call will be successful because the server thread is still sleeping.');
}); </script>
答案 1 :(得分:2)
这里我将其设置为async = true。即便如此,我在5秒钟后收到成功消息。这意味着不是异步的。我相信如果async = true,它将不会等待来自webserivice的消息。
不,async
表示工作线程已被锁定,不会执行其他任何代码(并可能冻结窗口......),直到它从服务器获取其请求的响应。
这并不意味着你会得到一个答案!
答案 2 :(得分:-1)
您是否检查过webservice是否设置为以脚本执行。
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
如果有效,请检查并发送更新。