【发布时间】:2018-05-31 17:44:33
【问题描述】:
我的函数有 2 个 ajax 请求。第二个 ajax 工作正常,但结果没有附加到我的 div 中。这是我的代码。任何帮助将不胜感激。
function load_candidates() {
$.ajax({
url: 'admin/requests/Get-Positions.php',
method: 'POST',
data: {
id: id
},
dataType: 'json',
success: function(result) {
var textToInsert = '';
$.each(result, function(key, value) {
var position_id = value['id'];
textToInsert += '<div class="card bg-primary text-center"><div class="card-body"><h4 class="text-white m-0" id="position">' + value['position'] + '</h4></div></div><br><div class="row">';
$.ajax({
url: 'admin/requests/Get-Candidate_Per_Position.php',
method: 'POST',
data: {
position_id: position_id
},
dataType: 'json',
success: function(data) {
$.each(data, function(key, value) {
textToInsert += '<div class="col-lg-4 col-sm-6 text-center mb-4"><h3>' + value['name'] + '</h3><p>' + value['candidate_number'] + '</p></div>';
});
}
});
textToInsert += '</div>';
});
$('#candidate_list').append(textToInsert);
},
error: function(xhr, status, error) {
console.log(xhr.responseWithJSON)
}
});
}
【问题讨论】:
-
您在从第二个 ajax 请求获得结果之前的附加。移动你的 $('#candidate_list').append(textToInsert);到第二个 ajax 成功调用
-
这会有所帮助,但您也会在每次 AJAX 调用(不是完成)之后直接在循环中关闭 div,因此您将在 textToInsert 和然后 ASYNCHRONOUSLY 之后将附加迭代响应。
-
@Sagar 这就是我要回答的问题(并将
textToInsert += '</div>';移至同一个回调)。但还不够。从 $.each 可以看出他正在触发多个 AJAX 请求以获取每个职位的候选人。使用 async: false 可能会有所帮助,但您会遇到性能问题,因为您将连续触发多个请求并等待每个请求返回。我建议使用流控制库,例如async(特别是查看 async.map),或者更好的是 promises(如果需要,我可以提供代码示例)。 -
谢谢你,我想我越来越近了。我得到了我想要的,但结果翻了一番。你觉得我哪里错了?谢谢btw sagar。
-
我认为您有双重结果,因为您将
textToInsert附加到 div 的次数与您的职位一样多。
标签: javascript jquery ajax append