Весь смысл AJAX в том, что он асинхронный, что означает, что вы можете обрабатывать результаты только внутри обратного вызова. Метод $.ajax
запускает AJAX-запрос к серверу и немедленно возвращается. На этом этапе значение завершения все еще ложно, и вы покидаете функцию. Намного позже, когда AJAX завершает успешный обратный вызов, выполняется. Только внутри этого обратного вызова вы можете использовать результаты, отправленные с сервера.
При использовании AJAX не следует организовывать свой код JavaScript последовательно и синхронно.
Так и должно быть:
$.ajax({
url: '/actioncontroller/savenumbermatrix',
type: 'POST',
data: JSON.stringify(object),
dataType: 'json',
processData: false,
contentType: 'application/json; charset=utf-8',
success: function (data) {
// TODO: only here you can use the results of an AJAX call
}
});
Также я бы порекомендовал вам, чтобы действия вашего контроллера всегда возвращали результаты действий, а не строки:
[HttpPost]
public ActionResult SaveNumberMatrix(NumberViewModel model) {
return Json("Finished");
}
Другая проблема с вашим кодом заключается в том, что вы указываете dataType: 'json'
в качестве ответа и возвращаете строку Finished
с сервера, который является недопустимым JSON.