Пост выполняется асинхронно, поэтому он возвращается из вашей функции еще до того, как обратный вызов поста будет вызван. Вы должны предоставить обратный вызов вашей функции, который может быть вызван после завершения публикации, и выполнить все необходимые действия в каждом случае. Обратите внимание, что обратный вызов может принимать параметр, который обычно будет возвращаемым значением вашей функции (true / false).
В качестве альтернативы можно было бы переключиться на использование $ .ajax и установить для параметра async
значение true, а затем записать значение для возврата в локальную переменную, которую вы присваиваете внутри функции обратного вызова ajax.
Я бы придерживался идеи обратного вызова, поскольку синхронный запрос может заблокировать ваш браузер до его завершения.
FWIW, я обнаружил, что анализатор JSON работает просто отлично - вам не нужно использовать eval. Просто верните данные как целочисленное значение и используйте их.
function(data) {
if (data && data.ID == 0) {
...
my_callback( true );
}
else {
...
my_callback( false );
}
...
Где ваш серверный код выглядит примерно так:
return Json( new { ID = user == null ? user.ID : 0 } );