Javascript执行顺序问题

时间:2011-08-30 16:09:32

标签: javascript jquery execution

我遇到了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");

编辑:增加了一些实际发生的事情,以防它有所帮助,可能会知道我是怎么做的!

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

false 1

false 2

false 4

false 5

true 3。

这里的问题是if(bValid == true)正在if(validateForm() == TRUE)之前执行,所以这意味着bValid总是假的。

为什么代码的一部分在另一部分之前执行?

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

Javascript区分大小写。 validateForm()返回一个bool对吗?无论是真是假。 TRUE 与true相同。

if (validateForm() == true) { // do something. }

我甚至更进一步,使用严格等于:

if (validateForm() === true) { // do something. }

此外,bvalid 与bValid相同。

将来我建议使用众多的javascript工具之一来帮助查找语法错误(例如jsfiddle,jslint,jsbin等)。我们都犯错误,有时这些简单的细节会引起很大的麻烦。虽然YUI和谷歌有语法检查工具可以提供帮助,但是没有编译器拐杖(就像我每天用C#)。

Google - http://code.google.com/closure/

雅虎! - http://developer.yahoo.com/yui/

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

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

http://api.jquery.com/jQuery.ajax/

默认情况下,JQuery ajax(为.get函数提供支持)是异步。但是,您可以覆盖它并使其同步。

答案 1 :(得分:0)

您不需要在这些条件上指定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"); 

答案 2 :(得分:0)

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

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

setTimeout(function() { // Continue le script après l'insertion du html
    if(bValid == true){
        //do something
    }
    alert(bValid + " 4");
}, 0);

这样,脚本的第一部分应该在开始第二次验证之前完成。 希望这有帮助。

答案 3 :(得分:0)

$.get是异步的。这意味着您发送消息,挂断电话,等待jQuery在submit_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请求完成之后)