0

我创建了一个 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 调用脚本

<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 它不会等待来自网络服务的消息。这实际上是我的要求。

4

3 回答 3

3

成功函数是一个回调;它被设计为在收到响应后调用。如果在服务器线程执行完成之前调用它,您如何确定成功或错误?对 Sleep 的调用会暂停当前的服务器线程,因此您的响应当然需要 5 秒钟才能恢复。

异步部分将适用于直接跟随您的 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>
于 2012-04-09T05:45:24.797 回答
2

在这里,我将其设置为 async = true。即使这样,我也会在 5 秒后收到成功消息。这意味着不是异步的。我相信如果 async = true 它不会等待来自网络服务的消息。

不,async意味着工作线程被锁定并且不会执行任何其他代码(并且可能会冻结窗口......),直到它从服务器获得对其请求的响应。
这并不意味着你会在瞬间得到答案!

于 2012-04-09T05:35:55.633 回答
-1

您是否检查过 web 服务设置为在脚本中执行。

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 

[System.Web.Script.Services.ScriptService]

请检查此项并发送更新是否有效。

于 2012-04-09T05:35:17.143 回答