Не удалось изменить значение переменной внутри успеха $ ajax - PullRequest
1 голос
/ 22 ноября 2011

У меня странно странная проблема, вот мой код JS

function ValidateUser(username) {
   var userExists = "somevalue";


   $.ajax({
       contentType: 'application/json, charset=utf-8',
       type: "POST",
       url: "/Controller/Validate",
       data: JSON.stringify({ username: username }),
       cache: false,
       dataType: "json",

       success: function (response) {
           alert(response);

           if (response == true) {
               userExists = true;
               alert("user exists: " + userExists);
           } else {
               alert("user exists: " + userExists);
           }
       },

       error: function (XMLHttpRequest, textStatus, errorThrown) {
           alert('error');
       }

   });

    return userExists;

}

хорошо, действие работает нормально и правильно проверяет пользователя, но функция ВСЕГДА возвращает "somevalue" ..... Что дает? Я догадываюсь, что это как-то связано с областью действия функции. Но как мне решить эту проблему.

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Поскольку функция, которую вы вызываете $.ajax, возвращается до завершения вызова Ajax.

Простой ответ заключается в том, чтобы выполнить работу, которую вам необходимо выполнить в функции success, либо с помощью немедленной функции (как сейчас), либо путем установки success для существующей функции.

Вы также можете использовать функцию jQuery $.when .

0 голосов
/ 15 мая 2012

Вы также можете использовать параметр «asynch: false», он заблокирует браузер, отключив любые действия, пока запрос активен. Вот ваш код изменился:

function ValidateUser(username) {
   var userExists = "somevalue";


   $.ajax({
       contentType: 'application/json, charset=utf-8',
       type: "POST",
       url: "/Controller/Validate",
       asynch: false,
       data: JSON.stringify({ username: username }),
       cache: false,
       dataType: "json",

       success: function (response) {
           alert(response);

           if (response == true) {
               userExists = true;
               alert("user exists: " + userExists);
           } else {
               alert("user exists: " + userExists);
           }
       },

       error: function (XMLHttpRequest, textStatus, errorThrown) {
           alert('error');
       }

   });

    return userExists;

}

Вы можете получить больше информации здесь: jQuery.ajax ()

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