使用jQuery ASP.NET的异步AJAX调用无法正常工作

时间:2012-04-09 05:30:08

标签: jquery ajax web-services asynchronous

我已经创建了一个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的消息。这实际上是我的要求。

3 个答案:

答案 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]

如果有效,请检查并发送更新。