3 일 동안 내 코드에서 JQuery 지연 메서드를 사용하는 방법을 찾으려고하지만 불행히도 솔루션을 찾지 못했습니다.JQuery 지연된 요청 각 루프에서 아약스
두 가지 기능이 있습니다. 첫 번째 init_items
첫 번째 아약스 요청을 보내 항목 목록을 가져온 다음 루프는 해당 항목 이름을 사용하여 다른 요청을 보내 항목에 대한 세부 정보를 얻습니다. 이 글에서는 첫 번째 요청이 완료되면 다음 요청을 시작하겠습니다.
클릭 할 때 호출되는 두 번째 함수에서 데이터를 가져 오기 전에 첫 번째 기능이 완전히 완료되었습니다 (모든 요청이 완료되었습니다).
function init_items(id) {
$.when(
$.ajax({
async: false,
data: { type : type, name : domain },
type: 'GET',
url: 'select_items.php'
}).done(function (data) {
var promises=[];
$.each(JSON.parse(data), function(k,v) {
var code = v.code;
getCurrentItem(code);
var req = $.get("get_groups.php", { id: id }).done(function(data1) {
res = JSON.parse(data1);
global_news[domain] = res;
promises.push(req);
});
return $.when.apply(null, promises).done(function(){
console.log('done 1');
});
});
}
$("button[name='refresh_value']").on("click", function() {
var id = $("select[name='id']").val();
$.when(init_items(id)).done(function(n){
console.log(n.num);
console.log('all set');
});
});
현재 버튼을 클릭에 init_items
출시를 작동하지만 정보를 표시 할 수있는 결과를 기다리지 않습니다.
나는이 사건을 크게 외면하고, 지연하고, 약속하고, 많이 읽었지만이 문제를 해결하지 못했다.
누구나 아이디어가 있습니까? 나는 정말로 당신의 도움에 감사 할 것입니다.
최저
,샘
a) 연결을 위해'done' 대신'then'을 사용해야합니다. 가능한 한 어디서든 '완료'하지 마십시오. b) 괄호가 들여 쓰기와 일치하지 않습니다. 당신이 옳은 일을하려했지만, 작성한 코드는 그것을하지 않습니다. 내부의'done' 콜백이 어떻게/어디에서 끝나는지는 이해가되지 않습니다. – Bergi
'domain'은 상수로 보이고 nomansland에서는'getCurrentItem (code)'이 떠 다니는군요. –