Использовать переменную за пределами функции успеха из вызова ajax/jquery

У меня есть следующий код

var test;
     $.ajax({
        type: "GET",
        url: "../views/person/controller.php?actor=person&action=checkAge",
        data: "age=" + value,
        success: function(msg){
            console.log(msg);
            test = msg; 
        },
    });
    Validate.fail(test);

Теперь тест var должен выдавать значение false, как говорит консоль. Но test var дает мне undefined почему?

Ответы

Ответ 1

Возможно, потому что Validate.fail(test) происходит сразу после асинхронного вызова. Помните, что это ASYNCHRONOUS, что означает, что он выполняется параллельно с javascript, запущенным на вашей странице.

Ответ 2

 var test;  <-- (1) This code runs first  
 $.ajax({   <-- (2) Then this runs  
    type: "GET",
    url: "../views/person/controller.php?actor=person&action=checkAge",
    data: "age=" + value,
    success: function(msg){
        console.log(msg); <-- (4) Finally this is run. IF your request is a success 
        test = msg; 
    },
 });
 Validate.fail(test); <-- (3) This runs third  

Посмотрите на порядок выполнения кода. Ваша переменная просто недоступна в этой точке, потому что она работает, когда код запускается через обратный вызов

Ответ 3

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var xm;

  $("#txt").ajaxComplete(function(){
    $('#txt').html(xm);
  });

  $("button").click(function(){

    $.ajax({
      url: 'DBresult_load.php',
      dataType: 'html',
      data: { },                 //you can pass values here
      success: function(result) {xm =result;}
    });
  });


});
</script>
</head>
<body>

<div id="txt"><h2>Let AJAX change this text</h2></div>
<button>Change Content</button>
</body>
</html>

Вот решение для передачи значений переменной из запроса Ajax. Надеюсь, это поможет.

Ответ 4

enter code here var test;
 $.ajax({
    type: "GET",
    async: false,
    url: "../views/person/controller.php?actor=person&action=checkAge",
    data: "age=" + value,
    success: function(msg){
        console.log(msg);
        test = msg; 
    },
});
Validate.fail(test);

//Сделайте вашу функцию ajax синхронной, установите json-параметр "async: false", поэтому javascript должен ждать, пока тестовое значение не будет назначено.

Ответ 5

Что происходит, когда вы удаляете "var" перед термином "test", когда вы его объявляете?

Я не уверен, как функция обратного вызова обрабатывается jQuery, поскольку она завернута в несколько других расширенных методов. Но причина, по которой я говорю, оставить var в объявлении переменной test, состоит в том, что var назначает тест относительно области действия. Если ваш обратный вызов обрабатывается определенным образом, вы можете потерять область, в которой определяется test. Вы можете отказаться от назначения var и оставить его в качестве глобальной переменной. Возможно, это сделает его видимым?

EDIT:: Не понял, что вы ссылались на термин в вызове функции после запроса async - я бы предложил включить последний оператор в ваш обратный вызов.

:)