Ответ 1
Возможно, потому что Validate.fail(test) происходит сразу после асинхронного вызова. Помните, что это ASYNCHRONOUS, что означает, что он выполняется параллельно с javascript, запущенным на вашей странице.
У меня есть следующий код
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 почему?
Возможно, потому что Validate.fail(test) происходит сразу после асинхронного вызова. Помните, что это ASYNCHRONOUS, что означает, что он выполняется параллельно с javascript, запущенным на вашей странице.
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
Посмотрите на порядок выполнения кода. Ваша переменная просто недоступна в этой точке, потому что она работает, когда код запускается через обратный вызов
<!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. Надеюсь, это поможет.
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 должен ждать, пока тестовое значение не будет назначено.
Что происходит, когда вы удаляете "var" перед термином "test", когда вы его объявляете?
Я не уверен, как функция обратного вызова обрабатывается jQuery, поскольку она завернута в несколько других расширенных методов. Но причина, по которой я говорю, оставить var в объявлении переменной test
, состоит в том, что var
назначает тест относительно области действия. Если ваш обратный вызов обрабатывается определенным образом, вы можете потерять область, в которой определяется test
. Вы можете отказаться от назначения var
и оставить его в качестве глобальной переменной. Возможно, это сделает его видимым?
EDIT:: Не понял, что вы ссылались на термин в вызове функции после запроса async - я бы предложил включить последний оператор в ваш обратный вызов.
:)