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

我有以下代码

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); 

现在测试变量应该像控制台所说的那样给出错误。 但是测试变量给了我未定义的原因?

可能是因为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 

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

 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必须等到测试被赋值。

        

Let AJAX change this text

这是从Ajax请求向值传递值的解决方案。 希望这可以帮助。

当您声明它时,在术语“test”之前删除“var”会发生什么?

我不确定如何用jQuery处理回调函数,因为它包含在一些其他扩展方法中。但是我说在test变量的声明中保留var的原因是var指定测试是相对的到范围。 如果以某种方式处理回调,则可能会失去定义test的范围。 您可能希望删除var赋值并将其保留为全局变量。 也许这会让它变得可见?

编辑::没有意识到你在异步请求后引用函数调用中的术语 – 我建议在回调中包含最后一个语句。

🙂