Вы правы.Оповещение вызывается до того, как вы получите ответ от сервера.Если вы не хотите, чтобы вызов .ajax немедленно возвращался, вы можете установить async в false.Это работает?
function myFunc() {
var str = "0";
JQuery.ajax({
type: "POST",
async: false,
url: "test.aspx/testMethod",
data: "{}",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(msg) {
alert(str); //here shows my value from my method
str = msg.d;
}
});
alert(str); //here shows "0";
return str;
}
Я должен отметить, что то, как вы это делаете, вероятно, не самое подходящее.Вы пытаетесь создать функцию, которая работает синхронно, потому что это просто и это то, к чему вы привыкли.Тем не менее, он побеждает всю цель асинхронных запросов и не вписывается в парадигмы Javascript.Вот что говорит об этом документация jQuery:
Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.
лучше иметь функцию обратного вызова, которая использует значение, полученное вами из вашего запроса.