Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, tenho um script que busca informações de outras páginas e nele são gerados arrays que posteriormente
são inseridos em outro array, não consigo fazer com que os arrays mantenham uma ordem para que eu possa
acessar o item correto. Pensei em colocar o nome em cada array , mas não obtive sucesso em puxar o nome
para dentro do Ajax. Como eu faço para que os arrays carreguem na ordem certa ou como inserir o nome da
label no array? Segue o script abaixo:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sem título</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<div class="label-head">
<span>Blogger</span>,
<span>adsense</span>,
<span>gadgets</span>,
<span>10th Birthday</span>
</div>
<script>
eachLabel = new Array();
dataPost = new Array();
arrayLabel = new Array();
$(".label-head span").each(function(){
eachLabel.push($(this).text());
});
console.log(eachLabel);
for(var l = 0;l < eachLabel.length;l++){
label = eachLabel[l];
$.ajax({
url: "https://blogger.googleblog.com/feeds/posts/default/-/" + label + "?alt=json-in-script&max-results=10",
type: "get",
dataType: "jsonp",
success: function(data){
for(var i = 0;i < data.feed.entry.length;i++){
var title = data.feed.entry[i].title.$t;
dataPost.push([title]);
}
//arrayLabel[label] = new Array(dataPost);
arrayLabel.push(dataPost);
dataPost = [];
}
})
}
console.log(arrayLabel);
</script>
</body>
</html>
Agradeço a atenção!Olá William Bruno, Muito obrigado por sua imensa ajuda, a ordem de carregamento esta perfeita. Fiz umas pequenas alterações no script para a criação dos grupos de array.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sem título</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<div class="label-head">
<span>Blogger</span>,
<span>adsense</span>,
<span>gadgets</span>,
<span>10th Birthday</span>
</div>
<script>
var eachLabel = [];
var dataPost = [];
var arrayLabel = [];
$(".label-head span").each(function(){
eachLabel.push($(this).text());
});
console.log(eachLabel);
var promises = []
eachLabel.forEach(function(label) {
promises.push(fetch(label))
});
Promise.all(promises)
.then(function(results) {
results.forEach(function(data) {
console.log(data.feed.link[1].href); //para debugar e você ver que manteve a ordem
data.feed.entry.forEach(function(entry) {
var title = entry.title.$t;
dataPost.push([title]);
});
arrayLabel.push(dataPost); //envia o grupo criado
dataPost = [];//empedindo que o mesmo receba todos os arrays
});
//return dataPost;
})
/*.then(function(dataPost) {
console.log(dataPost);
});*/
function fetch(label) {
return $.ajax({
url: "https://blogger.googleblog.com/feeds/posts/default/-/" + label + "?alt=json-in-script&max-results=10",
type: "get",
dataType: "jsonp"
})
}
console.log(arrayLabel);
</script>
</body>
</html>
Oi André, para trabalhar com fluxos assíncronos, o ideal e mais simples é utilizar Promises.
A função Promise.all retorna na ordem em que foi invocado e quando todos acabarem. Veja só como ficou:
<!doctype html>