Javascript执行顺序问题
我对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) {
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");