2011-05-03 81 views
8
$("#submit").click(function() { 
    var boolError = false; 

    CheckForm("#email"); 
    CheckPhone("#phone"); 

    if (boolError == true) { 
     console.log('error'); 
    } else { 
     console.log('here'); 
     // $("#form").submit(); 
    } 
}); 

问题之前等待的jQuery AJAX的回应是,它总是返回console.log('here');如何选择条件

有没有办法等待CheckForm和CheckPhone。从CheckForm功能AJAX调用:

$.ajax({ 
    type: "POST", 
    url: "/webservice/user.asmx/CheckForm", 
    data: "{'type':'" + var_type + "', 'value':'" + var_value + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    error: function (XMLHttpRequest, textStatus, errorThrown) { }, 
    success: function (data) { 
     var obj = data.d; 
    } 
}); 

回答

16

尝试设置 async为false: 见编辑下面

$.ajax({ 
    type: "POST", 
    async: false, 
    url: "/webservice/user.asmx/CheckForm", 
    data: "{'type':'" + var_type + "', 'value':'" + var_value + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    error: function (XMLHttpRequest, textStatus, errorThrown) { }, 
    success: function (data) { 
     var obj = data.d; 
    } 
}); 

这将使得AJAX呼叫阻塞,因此浏览器将等待它继续之前完成。当然,我仍然不确定这是如何与在父条件中检查的布尔值相关的。也许有代码,你不向我们展示了......


编辑: :::感叹:::我当时年幼无知的时候我张贴了这个答案,其实已经忘记了这一切。我将以上信息保留为历史用途(因为它似乎帮助了一些人,或者至少他们认为它已经),但明白这是不是正确的做法

使异步调用同步和阻止执行在每个方面都是不正确的。不要这样做。相反,构建逻辑以响应异步操作。在这个问题的情况下,调用console.log()应该发生在AJAX调用的成功(或错误)处理程序中,而不是在调用该调用之后的代码中。

7

你必须这样做,从AJAX调用回调 - 这样的:

$.ajax({ 
    type: "POST", 
    url: "/webservice/user.asmx/CheckForm", 
    data: "{'type':'" + var_type + "', 'value':'" + var_value + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     console.log('error'); 
    }, 
    success: function (data) { 
     console.log('here'); 
    } 
}); 

使用AJAX需要非线性规划 - 回调比比皆是。

您可以在ajax调用中设置选项,使其不会异步(即jQuery将等待它完成),但这会使您的应用程序/网站无法正常运行。

+0

正确的。编程JavaScript和AJAX时,使用回调是必须的。 – Tadeck 2011-05-03 10:32:17

1

是的,你把有条件的成功函数。

success: function (data) { if (...) { } else { }   

var obj = data.d; 
    } 
1

其中u集boolError=true ?? dats为什么它总是返回这里;

ü必须改变这样的逻辑checkForm

$.ajax({ 
    type: "POST", 
    error: function (XMLHttpRequest, textStatus, errorThrown) { boolError==true;}, 
    success: function (data) { 
     var obj = data.d; 
    } 
});