在ajax/jquery调用中使用success函数之外的变量

Dow*_*own 17 javascript 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);
Run Code Online (Sandbox Code Playgroud)

现在测试变量应该像控制台所说的那样给出错误.但测试变量给了我不明确的原因?

Joh*_*hnP 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  
Run Code Online (Sandbox Code Playgroud)

查看代码运行的顺序.您的变量在那时根本不可用,因为它在通过回调触发代码时运行


map*_*aft 21

可能是因为Validate.fail(test)在异步调用之后立即发生.请记住它是ASYNCHRONOUS,意味着它与您页面上运行的javascript并行执行.

  • Tnx这帮助我找到解决方案通过对call属性执行async:false (2认同)

小智 8

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);
Run Code Online (Sandbox Code Playgroud)

//使你的ajax函数同步,设置json参数"async:false",所以javascript必须等到测试被赋值.