JQuery Ajax проблема внутри функции - PullRequest
1 голос
/ 29 июня 2011

этот код всегда возвращает "0":

function myFunc() {

var str = "0";

JQuery.ajax({
      type: "POST",
      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;

Но возвращаемое значение моей функции js всегда равно "0".Я думаю, что JavaScript возвращает str до завершения ajax.Что я мог сделать?

}

1 Ответ

2 голосов
/ 29 июня 2011

Вы правы.Оповещение вызывается до того, как вы получите ответ от сервера.Если вы не хотите, чтобы вызов .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:

Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.

лучше иметь функцию обратного вызова, которая использует значение, полученное вами из вашего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...