2012-04-09 56 views
0

我已经创建了一个web服务的调用来自jquery ajax函数。但是,即使异步设置为true,则不能以异步方式运行..使用jQuery ASP.NET异步AJAX调用ASP.NET不工作

我的ASP.NET Web服务代码

<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> 

在这里,我将其设置为异步=真正。即使这样,我在5秒后就会收到成功消息。这意味着不是异步的。我相信如果async = true,它不会等待来自webserivice的消息。这实际上是我的要求。

+0

顺便说一下,您已设置的选项值; async:true是默认值。 – 2012-04-11 13:50:09

回答

3

成功功能是回调;它被设计为在收到响应之后被调用。如果在服务器线程执行完成之前调用成功或错误,那么如何确定成功或错误?睡眠呼叫会暂停当前的服务器线程,所以当然您的响应需要五秒钟才能恢复。

异步部分将应用于直接跟在您的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> 
+0

嗨丹...谢谢你的明确信息。但我还有一个疑问。想象一下,我的web服务包含一些长时间运行的代码,我们使用ajax进行了web服务调用。我的疑问是,如果用户关闭该浏览器窗口,该Web服务代码执行是否会暂停,或者即使在浏览器关闭之后,它仍会继续,直到所有代码都在webservice中执行为止。 – 2012-04-09 11:09:27

+0

@ user954093我不能说权威,因为我从来没有遇到过这个问题,但我认为你的服务器端进程仍然可以完成独立于它被调用的浏览器状态的执行。当然,除非您正在跟踪服务器端的会话状态,并且明确表示要结束会话才会中止。 – 2012-04-09 14:16:47

+0

谢谢兄弟。我试过了,正在后台工作。干杯老板.. – 2012-04-09 17:25:42

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

请检查并发送更新,如果它工作与否。

+0

Web服务工作正常。 – 2012-04-09 06:02:55

+0

嘿@AndrewBarber我只是交叉检查!有时会发生,我们一路工作,忘记一条简单的线路。 – Murtaza 2012-04-11 12:26:16

2

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

没有,async意味着工作线程被锁定并不会执行任何其他代码(会冻结在窗口...),直到它从服务器获取其请求的响应。
这并不意味着你会得到一个答案我一会儿!