2009-02-23 55 views
0

如果我有这样的功能:JavaScript变量的作用域问题

function validateSomething() 
{ 
    var valid; 
    $.post("something.php", {x:y}, 
    function(data) 
    { 
    if (isSomething(data)) 
     valid=true; 
     //Here referring to the valid variable 
     //set outside this function, in the 
     // parent function 
    else 
     valid=false; 
    }); 
    return valid/ 
} 

,才有可能设定valid从Ajax请求完成后,这就是所谓的子功能内?如果没有,我怎么能根据ajax请求的结果从父函数返回true/false?

回答

2

如果不是,我该如何根据ajax请求的结果从父函数返回true/false?

你不能;这不是如何Asynchrony工作。

AJAX调用可能永远不会返回!父亲函数应该触发验证请求,然后假定它是无效的(比如,通过禁用提交按钮)或显示“我在想”反馈(旋转指示符)。

然后,AJAX返回处理函数将清理那些部分(通过启用按钮或将指示器更改为绿色复选标记或红色X)。如果AJAX呼叫永远不会通过 - 它保持无效。如果确实通过了,那就是清理过程发生的时间。

+0

但是这都是作为表单验证过程的一部分完成的。所以我的代码遍历所有字段(当点击提交时),验证它们全部,并且如果所有验证函数返回true,则它将提交表格 – 2009-02-23 13:15:51

+0

这怎么做? – 2009-02-23 13:17:02

1

有效期将被更新,是的。但是:AJAX-Call是异步的,即。你的函数肯定会在父函数返回后被调用。没有办法等待异步过程完成。

0

虽然您可以从内部函数设置变量,但由于内部函数在异步完成后将被调用,因此不会及时设置返回。根据你正在尝试做什么,你可以通过回调函数简单地调用根据返回值发生的动作来处理它。例如,如果你点击一个链接,如果帖子成功,你可以从你的validateSomething函数返回false,然后在成功后从链接中获取href并使用它的值设置location.href来模拟效果点击链接的链接(不重新运行验证功能)。