$(document).ready(function () {
$('.out').each(function(index) {
.ajax({
url: "php,
type: "GET",
success: function(data) {
// LOOP each dynamic textbox for my specific validation
console.log('1'); // flag if any error
}
});
// I though this will run after $('.out').each()
console.log('2'); // my plan is to check if atleast 1 error occur
});
result:
> 2
> 1
> 1
> 1
instead of:
> 1
> 1
> 1
> 2
我认为流程将是,首先运行每个函数将显示1 1 1等,之后它将显示2.可以有人帮助我如何完成我需要的工作吗?
提前致谢
答案 0 :(得分:1)
正如已经提到的,Ajax是异步的,这意味着你的console.log('2')语句可以在调用成功函数之前执行。
尝试这样的事情:
$(document).ready(function () {
$('.out').each(function(index) {
$.ajax({
url: "yourUrl.php",
type: "GET",
success: function(data) {
// LOOP each dynamic textbox for my specific validation
console.log('1'); // flag if any error
},
complete: function (jqXHR, textStatus){
//This will be be called when the request finishes
//(after success and error callbacks are executed)
console.log('2'); // my plan is to check if atleast 1 error occur
}
});
});
});
看看这里更好地理解jQuery ajax调用: http://api.jquery.com/jQuery.ajax/
答案 1 :(得分:1)
假设您更正了代码中的语法错误(在$
之前丢失.ajax
,在"
值上丢失了url
,并且错过了关闭});
$.ajax
电话,以及我没有发现的任何其他错误:
$(document).ready(function () {
$('.out').each(function(index) {
$.ajax({
url: "php",
type: "GET",
success: function(data) {
// LOOP each dynamic textbox for my specific validation
console.log('1'); // flag if any error
}
});
});
console.log('2'); // my plan is to check if atleast 1 error occur
});
然后,执行就绪函数中的语句的顺序首先是.each()
将为每个$.ajax()
元素调用'.out'
,然后console.log('2')
调用{{1}}将执行end并准备就绪函数,然后稍后将按照浏览器接收到Ajax响应的顺序为每个Ajax请求调用成功函数 - 不一定是Ajax请求的顺序。 (显然这假设他们实际上 成功。)
这是因为Ajax请求(应该是)异步 - 在当前代码块完成后将始终调用响应回调,无论响应收到多快,因为(忽略)网络工作者)JavaScript不是多线程的。