Jquery / Javascript $ .get的可变范围问题

时间:2010-11-22 13:49:53

标签: javascript jquery scope

我遇到以下情况的问题:

leeftijd:function(){
                var testvar = "untouched";

                var d = $('#gebdatumdd').val(),
                    m = $('#gebdatummm').val(),
                    y = $('#gebdatumjjjj').val();

                x = "none!";

                $.get("assets/incl/ageCheck.php", {y:y, m:m, d:d},
                    function(data){                 
                        console.log(data); // returns 'green';      
                        console.log(testvar);    // returns 'untouched';    
                        testvar = data; // write data in testvar;
                        console.log(testvar); // returns 'green';
                });

                console.log('outside: ' + testvar); // returns 'untouched'; 

            }

我的'testvar'只是不会返回正确的值。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

ajax调用是异步的。这样在请求完成之前执行最后console.log。您必须在回调函数中执行所有需要请求结果的处理。

另一种选择是$.ajax使用async: false选项。但是,这可能会锁定浏览器,直到请求完成!

答案 1 :(得分:1)

您可以同步运行它。我认为应该可以用这样的东西包装$ .get()调用:

$.ajaxSetup({ async: false });

$.get();

$.ajaxSetup({ async: true });

更好的解决方案是实际使用回调方法来处理完成年龄检查时想要发生的任何事情。

function ageCheckCallback(data) {
// Update form
}