我有以下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参数。我想删除它。我该怎么做才能解决这个问题?
答案 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);
}