Javascript $.Get方法在each()循环中不起作用
在下拉选择中,我运行以下jquery,我使用每个jquery遍历一个li 我的$.get需要一些时间才能从服务器获取数据,所以我通过切换来加载img。但每个方法都不会等到get带来数据,而是直接跳到末尾 如何在get从服务器带来数据之前保存这些数据 JQUERYJavascript $.Get方法在each()循环中不起作用,javascript,jquery,ajax,Javascript,Jquery,Ajax,在下拉选择中,我运行以下jquery,我使用每个jquery遍历一个li 我的$.get需要一些时间才能从服务器获取数据,所以我通过切换来加载img。但每个方法都不会等到get带来数据,而是直接跳到末尾 如何在get从服务器带来数据之前保存这些数据 JQUERY jd('#UserId').change(function (e) { var selectedID = jd(this).val(); jd('.load
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
jd(".stats_box li").each(function (index, liElement) {
var li_id = liElement.id;
/* Request the partial view with .get request. */
jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
jd('#CaseStatus').html(data);
});
});
alert("End");
jd('.loading').css("display", "none");
});
在Jquery上面运行时,它会直接向我显示警报&然后过一段时间就会看到数据。您需要等待所有请求完成
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
var rqts = [];
jd(".stats_box li").each(function (index, liElement) {
var li_id = liElement.id;
rqts.push(jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
//I've a doubt about the target element
jd('#CaseStatus').html(data);
}));
});
//wait for all requests to complete
jd.when.apply(jd, rqts).always(function () {
jd('.loading').css("display", "none");
})
});
正如meagar所建议的,最好使用.map
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
var rqts = jd(".stats_box li").map(function (liElement, index) {
var li_id = liElement.id;
return jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
//I've a doubt about the target element
jd('#CaseStatus').html(data);
});
});
//wait for all requests to complete
jd.when.apply(jd, rqts).always(function () {
jd('.loading').css("display", "none");
})
});
您需要等待所有请求完成
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
var rqts = [];
jd(".stats_box li").each(function (index, liElement) {
var li_id = liElement.id;
rqts.push(jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
//I've a doubt about the target element
jd('#CaseStatus').html(data);
}));
});
//wait for all requests to complete
jd.when.apply(jd, rqts).always(function () {
jd('.loading').css("display", "none");
})
});
正如meagar所建议的,最好使用.map
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
var rqts = jd(".stats_box li").map(function (liElement, index) {
var li_id = liElement.id;
return jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
//I've a doubt about the target element
jd('#CaseStatus').html(data);
});
});
//wait for all requests to complete
jd.when.apply(jd, rqts).always(function () {
jd('.loading').css("display", "none");
})
});
在循环中使用ajax时使用
并等待所有请求完成
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
var rqts = [];
jd(".stats_box li").each(function (index, liElement) {
var li_id = liElement.id;
rqts.push(jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
//I've a doubt about the target element
jd('#CaseStatus').html(data);
}));
});
//wait for all requests to complete
jd.when.apply(jd, rqts).always(function () {
jd('.loading').css("display", "none");
})
});
见下文
var work_list=[];
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
jd(".stats_box li").each(function (index, liElement) {
var li_id = liElement.id;
/* Request the partial view with .get request. */
work_list.push( jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
jd('#CaseStatus').html(data);
}));
//now it wait for all requests to complete then come in done()
jd.when.apply(jd, work_list).done(function() {
alert( "end" );
});
});
jd('.loading').css("display", "none");
});
在循环中使用ajax时使用
并等待所有请求完成
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
var rqts = [];
jd(".stats_box li").each(function (index, liElement) {
var li_id = liElement.id;
rqts.push(jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
//I've a doubt about the target element
jd('#CaseStatus').html(data);
}));
});
//wait for all requests to complete
jd.when.apply(jd, rqts).always(function () {
jd('.loading').css("display", "none");
})
});
见下文
var work_list=[];
jd('#UserId').change(function (e) {
var selectedID = jd(this).val();
jd('.loading').css("display", "block");
jd(".stats_box li").each(function (index, liElement) {
var li_id = liElement.id;
/* Request the partial view with .get request. */
work_list.push( jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {
jd('#CaseStatus').html(data);
}));
//now it wait for all requests to complete then come in done()
jd.when.apply(jd, work_list).done(function() {
alert( "end" );
});
});
jd('.loading').css("display", "none");
});
它是异步的,你不应该持有它。它是异步的,你不应该持有它。请在你的回答中用jd替换$更好地使用。map而不是。each;rqts=jd…映射函数{return$.get…}@meagar yes。。。这将使贝尼斯……工作准确。。!!请在回答中用jd替换$,但最好使用.map而不是.each;rqts=jd…映射函数{return$.get…}@meagar yes。。。这将使贝尼斯……工作准确@meagar我用了很多时间,所以我相信如果你知道一些更好的,那么请与我们分享:看看它在哪里。它在.each中,所以每次迭代时都要执行。它应该在所有迭代之后发生一次。谢谢您的回答,但在更改事件之前声明工作列表并没有给我完美的结果。在将其包含在更改中后,效果非常好。@meagar我用了很多时间,所以我确信如果您知道一些更好的,请与我们分享:看看它在哪里。它在.each中,所以每次迭代时都要执行。它应该在所有迭代之后发生一次。谢谢您的回答,但在更改事件之前声明工作列表并没有给我完美的结果。在将其包含在变更中之后,它工作得非常好。