Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AndréAraujo

Nomear array criado dentro do Ajax

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>
<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]);
        })
      });
      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"
    })
  }
</script>
</body>
</html>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá William BrunoMuito 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>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Pessoal, pergunta bem simples. Abaixo tenho o seguinte código:
       
      <script>
      function alerta()
      {
        if (window.confirm("Você realmente quer sair?")) {
          window.open("sair.html");
      }
      }
      </script>
       
      Funciona perfeitamente, só que está abrindo em outra janela e quero que abra na mesma janela.
       
      Alguém pode me ajudar?
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por Thiago Duarte
      Oi, gostaria de arrastar imagem e ao soltar formar bloco html, meu bloco de html ficaria com nome, content-1.html, content-2.html, etc
       
      Alguem pode me ajudar?
    • Por belann
      Olá!
       
      Estou fazendo o upload de arquivos com fetch dessa forma
      fetch(url, {
              method: 'POST',
              headers: {'Content-Type': 'multipart/form-data',},
              body: formData 
          }).catch((error) => (console.log("Problemas com o Upload"), error));
       
      estou usando input type=file
      e criando uma const formData = new FormData(); 
      mas não faz e não dá nenhum erro.
      estou fazendo o upload com a url="http://localhost/dashboard/dados".
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.