我有以下代码
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);
现在test var应该像控制台所说的那样给出false。 但是测试变量给了我不明确的原因?
答案 0 :(得分:24)
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
查看代码运行的顺序。您的变量在此时根本不可用,因为它在通过回调触发代码时运行
答案 1 :(得分:20)
可能是因为Validate.fail(test)在异步调用之后立即发生。请记住它是ASYNCHRONOUS,这意味着它与您页面上运行的javascript并行执行。
答案 2 :(得分:7)
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参数&#34; async:false&#34;,所以javascript必须等到测试被分配一个值。
答案 3 :(得分: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 :(得分:-1)
当您声明它时,在术语“test”之前删除“var”会发生什么?
我不确定如何使用jQuery处理回调函数,因为它包含在其他几个扩展方法中。但我之所以说在test
变量的声明中保留var是的原因是var
指定测试相对于范围。如果以某种方式处理回调,则可能会失去定义test
的范围。您可能希望删除var
赋值并将其保留为全局变量。也许这会让它变得可见?
编辑::在异步请求之后没有意识到您在函数调用中引用了该术语 - 我建议在回调中包含最后一个语句。
:)