2016-12-22 4 views
0

У меня есть код javascript ниже, и я не могу заставить его вернуться к обработчику .done, если я не установил async: false для вызова ajax. Если я не включаю параметр async: false в мой вызов ajax, на службе после выполнения службы ничего не происходит.Успешный вызов jQuery Ajax не обрабатывается асинхронно

Вот мой 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; 
     } 
    } 

Я могу видеть, что сервер называется, но я никогда получите сообщение «Успех», если у меня нет параметра async: false. Я хотел бы удалить это. Что мне нужно сделать, чтобы исправить эту проблему?

+0

Примечания, Запятая следующего 'асинхронный: ложь,'. Почему метка 'json' включена в вопрос? _ «Я никогда не получаю сообщение« Успех », если у меня нет параметра async: false» _ Что происходит, когда 'async: false' не задано в параметрах' $ .ajax() '? – guest271314

+0

Я обновил вопрос, чтобы иметь правильный синтаксис. Когда async: false отключен от параметров ajax, тогда сервер вызывается, но javascript не выполняет код .done – YeahStu

+0

Этого не должно быть! Не могли бы вы просто попробовать с $ .post или $ .get' – Developer

ответ

1

Вам нужно будет работать с функцией обратного вызова, если вы хотите использовать успех и ошибку вызова ajax. Ajax по умолчанию асинхронен и сразу же вызывает функцию возврата после загрузки. Когда вы добавляете 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); 
} 
+0

Ничего себе. Кажется, это сработало. Я не думаю, что понимаю, почему эта разница имеет значение. – YeahStu

Смежные вопросы