Javascript执行顺序问题

Javascript执行顺序问题,javascript,jquery,execution,Javascript,Jquery,Execution,我对Javascript以一种对我来说毫无意义的顺序执行东西有一个问题 发生的情况如下 var bValid = false; alert(bValid + " 1"); if(validateForm() == TRUE) { $.get("submit_manageUsers.php", {action: sendAct, userID: userID}, function(responseText) {

我对Javascript以一种对我来说毫无意义的顺序执行东西有一个问题

发生的情况如下

var bValid = false;
alert(bValid + " 1");
if(validateForm() == TRUE)
{
    $.get("submit_manageUsers.php",  
        {action: sendAct, userID: userID},  
        function(responseText)
        {  
            if(responseText == "GOOD")
            {
                alert("Update Successful");
                bValid = true;
                alert(bValid + " 2");
            }
            else
            {
                alert(responseText + "\n Update Unsuccessful");
                bValid = false;
            }
        },  
        "html"  
    );     
    bvalid = true;
    alert(bValid + " 3");
}
alert(bValid + " 4");
if(bValid == true)
{
    //do something
}
alert(bValid + " 5");
编辑:增加一些实际发生的事情,以防有帮助,可能会知道我是如何做事的

上述代码的输出如下所示:

错误1

错误2

错误4

假5

真的

这里的问题是
if(bValid==true)
if(validateForm()==true)
之前执行,因此这意味着bValid总是false

为什么代码的这一部分比另一部分先执行


非常感谢您在这方面的任何帮助

Javascript区分大小写。validateForm()返回布尔值,对吗?所以这不是真的就是假的。TRUE与TRUE不一样

if (validateForm() == true) { // do something. }
我甚至会更进一步,使用严格的equals:

if (validateForm() === true) { // do something. }
此外,bvalid与bvalid不相同

将来,我建议使用众多javascript工具中的一种来帮助查找语法错误(如JSFIDLE、jslint、jsbin等)。我们都会犯错误,有时这些简单的小细节会让人头疼。虽然YUI和Google有语法检查工具提供帮助,但javascript没有编译器的支撑(就像我每天使用C#)

谷歌-

雅虎

在原始问题中提供了更多信息之后-

您正在对PHP页面进行异步调用,这可能需要1秒或30秒


jQueryAjax(为.get函数提供动力)默认情况下是异步的。但是,您可以覆盖此选项并使其同步。

您不需要在这些条件上指定true或false。尝试以下方法,看看是否能解决您的问题:

var bValid = false; 
alert(bValid + " 1"); 

if (validateForm()) { 
    bvalid = true; 
    alert(bValid + " 2"); 
} 

alert(bValid + " 3"); 
if (bValid) {
    //do something 
} 

alert(bValid + " 4"); 
这样,脚本的第一部分应该在开始第二次验证之前完成。
希望有此帮助。

$。get
是异步的。这意味着您发送消息,挂断电话,然后等待jQuery在处理完
submit\u manageUsers.php
后给您回电话。第3步和第4步是在您挂断电话后完成的,但第2步仅在呼叫回拨后发生,可能需要一段时间。这就是为什么你的信息是无序的

$.get(url, data, function(response) { 
    if (response == 'GOOD') {
       alert('success!');
       DoSomethingMeaninfulHere();
    } else {
       alert(response + "\n Update Unsuccessful");
    }
});
你必须把电话打给我

// DoSomethingMeaningfulHere
alert(bValid + " 4");
if(bValid == true)
{
    //do something
}
alert(bValid + " 5");

在回调内部,以便在正确的时间(AJAX请求完成后)执行它。

TRUE是函数validateForm()将bValid变量设置为TRUE所应返回的值。请创建一个生成此输出的。如果未定义
TRUE
,代码将失败,并且不会产生任何进一步的输出。如果已定义,则输出将不同。在我看来,输出的顺序是不可能的。JSFIDLE允许jQuery吗?哦……
警报(bValid+“2”)
在您的ajax回调函数中@亚当:你可以跟着链接看一看;)但是现在您添加了更多的信息,问题就清楚了。我希望这是一个语法错误,但我只是在键入问题时匆匆忙忙,所有变量在实际代码中的拼写都是相同的,我认为这与jQuery有关。get和它如何运行,但不完全确定它是如何工作的!我想看看validateForm()函数。您正在对PHP页面进行异步调用,可能需要1秒或30秒。
// DoSomethingMeaningfulHere
alert(bValid + " 4");
if(bValid == true)
{
    //do something
}
alert(bValid + " 5");