Ir para conteúdo

POWERED BY:

Arquivado

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

FabianoSouza

Ajax dentro de loop não reconhece variável

Recommended Posts

Sei que é meio doideira mas vambora..

Tenho um array com diversos valores que usarei como parâmetro para rodar um AJAX diversas vezes (cada vez com parâmetros diferentes) (talvez seja meio doido isso mas foi a forma que encontrei para criar e popular dezenas de DIV sem ter que fazer uma a uma).

 

O primeiro loop varre o array (onde tem os parâmetros para o AJAX rodar) e deveria passar o parâmetro arrayWidgets[j][2] para o segundo loop, que aonde deve ser criada a <LI> com os dados.

 

O problema é que não está reconhecendo o valor arrayWidgets[j][2] como ID da DIV onde deve ser criada a <LI>

A linha com problema é

 var addli = document.getElementById(arrayWidgets[j][2]).appendChild(li);

O array que chega para function ajax(arrayWidgets) é esse

  var arrayWidgets = new Array(
  ["icone1", "Titulo1", "ID1"],
  ["icone2", "Titulo2", "ID2"]
  )

O código completo...

function ajax(arrayWidgets)
{
  var idModulo = "3"
  for( var j = 0; j <= arrayWidgets.length; j++ )
  {
	var obj = createXMLHTTP(); 
	obj.open("post", "aqui será um campo do array contendo o nome da página", true); 
	obj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	obj.onreadystatechange=function(){
	if (obj.readyState == 3){
	}
	else
	if (obj.readyState === 4 && obj.status === 200){ 
	var string_json = (obj.responseText);
	var lista = eval(string_json);
  //cria lista 
for( var i = 0; i <= lista.length; i++ )
{
	  var li = document.createElement("li")

	  var addli = document.getElementById(arrayWidgets[j][2]).appendChild(li); AQUI QUE ESTA A ZICA

	  var textlist = document.createTextNode(lista[i].titulo);
	  li.setAttribute('id', lista[i].id);
	  addli.appendChild(textlist);  
	  }
}
	}
		}
	obj.send(encodeURI("idModulo="+idModulo));
		  }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Fabiano, bom dia. Eu dei uma analisada em seu código e há algumas chaves faltando, n sei se foi no momento do paste aqui no forum, mas eu arrumei tente desta forma abaixo:

function ajax(arrayWidgets)
{
  var idModulo = "3"
  for( var j = 0; j <= arrayWidgets.length; j++ ){
    var obj = createXMLHTTP();
    obj.open("post", "aqui será um campo do array contendo o nome da página", true);
    obj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    obj.onreadystatechange = function(){
      if(obj.readyState === 4 && obj.status === 200){
        var string_json = obj.responseText;
        var lista = eval(string_json);
          //cria lista
        for( var i = 0; i <= lista.length; i++ )
        {
            var li = document.createElement("li")
            var addli = document.getElementById(arrayWidgets[j][2]).appendChild(li);
            var textlist = document.createTextNode(lista[i].titulo);
            li.setAttribute('id', lista[i].id);
            addli.appendChild(textlist);
        }
      }
    }
    obj.send(encodeURI("idModulo="+idModulo));
  }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, VitorF. Tudo carrega direitinho.
Se eu der um alert na linha

	var string_json = (obj.responseText);

Consigo visualizar os dados vindos do BD.

O problema está na hora de escrever os dado aonde preciso (numa DIV).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perguntei se a página já está carregada por completa para ter certeza que as Divs que você deseja inserir o conteúdo realmente existem, você tem certeza que não está executando esse código antes da criação das Divs?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, tenho certeza que as DIVs existem. Veja minha lógica.
Primeiro crio as DIVS e atribuo um ID para cada uma..

function criaWidgets()
{
	var alvo = document.getElementById("content").id;

	  //cria array
  var arrayWidgets = new Array(
  ["pg1.asp", "Titulo1", "ID1"],
  ["pg2.asp", "Titulo2", "ID2"]
  )
     for( var i = 0; i < arrayWidgets.length; i++ )
   {

  //cria container
  var containerWidget = document.createElement("div")
  var add_containerWidget = document.getElementById(alvo).appendChild(containerWidget)
  add_containerWidget.setAttribute('id', arrayWidgets[i][2])
  add_containerWidget.setAttribute('class','container-widget');
  add_containerWidget.setAttribute('onclick','pegaID(this.id)');
   }
ajax(arrayWidgets) // Aqui passo o array para a segunda function, a que trás os dados
}

Agora vem a segunda function, a que recebe os valores (para usar como parâmetros) do array e deveria escrever nas DIVs criadas pela function acima

function ajax(arrayWidgets)
{
  var idModulo = "3"
  for( var j = 0; j <= arrayWidgets.length; j++ )
  {
	var obj = createXMLHTTP(); 
	obj.open("post", "dados.asp", true); 
	obj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	obj.onreadystatechange=function(){
	if (obj.readyState == 3){
	}
	else
	if (obj.readyState === 4 && obj.status === 200){ 
	var string_json = (obj.responseText);
	var lista = eval(string_json);
  //cria lista 
for( var i = 0; i <= lista.length; i++ )
{
	  var li = document.createElement("li")
	  var addli = document.getElementById(arrayWidgets[j][2]).appendChild(li);
	  var textlist = document.createTextNode(lista[i].titulo);
	  li.setAttribute('id', lista[i].id);
	  addli.appendChild(textlist);  
	  }
}
	}
		}
	obj.send(encodeURI("idModulo="+idModulo));
		  }
		  

Como falei, os dados até são carregados, mas não são escritos pela linha

	  var addli = document.getElementById(arrayWidgets[j][2]).appendChild(li);

Compartilhar este post


Link para o post
Compartilhar em outros sites


tipo tava pensando assim.

 

 

 

function ajax(arrayWidgets){

var idModulo = "3";

for( var j = 0; j <= arrayWidgets.length; j++ ){

var obj = createXMLHTTP();

obj.open("post", "dados.asp", true);

obj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

obj.onreadystatechange=function(){

if (obj.readyState == 3){

} else{

if (obj.readyState === 4 && obj.status === 200){

var string_json = (obj.responseText);

var lista = eval(string_json);

segunda();

 

}

obj.send(

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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