 <p>The success function is a callback; it's designed to be called AFTER a response has been received. How could you determine success or error if it was called before the server thread execution had completed? The call to Sleep suspends the current server thread, so of course your response is going to take five seconds to come back.</p> <p>The asynchronous part would apply to Javascript code that directly follows your ajax post. For example:</p> <pre><code>&lt;script language="javascript"&gt; $(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.'); });​ &lt;/script&gt; </code></pre>