我遇到了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总是假的。
为什么代码的一部分在另一部分之前执行?
非常感谢任何帮助!
答案 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请求完成之后)