【问题标题】:Asynchronous processing using AJAX and .net Web Service使用 AJAX 和 .net Web 服务进行异步处理
【发布时间】:2014-12-05 11:22:40
【问题描述】:

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

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

 <script type="text/javascript">
    $(document).ready(function () {      
        $('#btnTest').click(function () {
            $('#btnTest').hide();
            $.ajax({
                type: 'POST',
                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);
                }
            });
        });
    });
</script>

网络服务

[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;
}

}

好的,我的问题是……这是异步的吗?……意思是当我单击按钮时它会发送请求并且我不会等待来自网络服务的任何响应……?

谁能解释一下?

谢谢

【问题讨论】:

  • 您的 javascipr 是异步的,它不会阻止发送请求,并且会在响应返回时触发 completefailure 回调。
  • 请注意,任何 ajax 错误都是 error: 而不是 failure:

标签: c# jquery asp.net ajax asynchronous


【解决方案1】:

它是异步的,一切都为你处理:)

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

指定complete: 回调在服务器返回响应时被调用,或者如果服务器上发生错误,则调用error:(不是failure)。

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

【讨论】:

  • 感谢@TrueBlueAussie。如我错了请纠正我。这是我的情况,我想计算每年的账单。好吧,现在一旦我点击运行按钮,已经发出了一个请求,这意味着它将在后台运行计费(我没有在这里添加代码,让我们想象一下)?这是正确的吗?
  • @Gopinath Koothaperumal:是的。如果您使用 Fiddler2 或 Chrome F12 网络面板之类的工具,您会看到请求/响应的时间“相对”慢(需要几分之一秒),但客户端浏览器代码仍在继续运行。跨度>
【解决方案2】:

在我的理解中我们需要定义什么异步? 请求或网络服务

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

要制作异步 Web 服务,您需要实现 IAsyncResult 开始操作 对象结束操作 为您服务的方法

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

【讨论】:

    【解决方案3】:

    是的,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);
                }
            });
        });
    });
    

    【讨论】:

    • 从不,重复从不,建议async: false作为任何事情的解决方案。始终鼓励使用 async 默认模式 :)
    • 是的,我知道,你是对的,但这是一个选项,他不知道 jQuery ajax 调用是如何工作的,这是他们的一个选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多