无法异步处理成功的jQuery Ajax调用

时间:2016-12-22 20:12:30

标签: jquery asp.net-web-api

我有以下javascript代码,除非我在ajax调用上设置async:false,否则我无法让它返回到.done处理程序。如果我没有在我的ajax调用中包含async:false参数,则在服务返回后客户端上没有任何操作。

这是我的javascript代码:

$(function () {
    $('#testButton').click(function () {
        TestConnection();
    });
});

function TestConnection() {
    $.ajax({
        url: 'http://localhost:52180/api/Accounts/Test',
        type: 'POST',
        async: false
    }).done(function (data) {
        alert('Success');
    }).fail(function (jqXHR, textStatus, err) {
        alert("There was an error communicating with the Mojo-Store server.");
    });
}

我的Html非常简单。如您所见,我引用了jQuery 3.1.1:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <script src="jquery-3.1.1.min.js"></script>
    <script src="ServerCommunication.js"></script>
</head>
<body>
                <button id="testButton">
</body>
</html>

在我的Web API项目中,我有一个简单的方法:

public class AccountsController : ApiController
    {
        public AccountsController ()
        {
        }

        public bool Test()
        {
            return true;
        }
    }

我可以看到服务器已被调用,但我从未获得成功&#39;消息,除非我有async:false参数。我想删除它。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果要使用ajax调用的成功和错误,则必须使用回调函数。 Ajax默认是异步的,并且在加载后立即调用return函数。当你添加async:false时,整个ajax调用不再是异步的,并且能够调用成功和错误。

尝试这样的事情来继续工作asycnhronous:

$(function () {
    $('#testButton').click(function () {
        TestConnection(Callback);
    });
});

function TestConnection(callbackfn) {
    $.ajax({
        url: 'http://localhost:52180/api/Accounts/Test',
        type: 'POST',
        success: function (data) {
            callbackfn("Success");
        },
        error: function (jqXHR, textStatus, err) {
            callbackfn("There was an error communicating with the Mojo-Store server.");
    });
}

function Callback(data) {
    alert(data);
 }