Ir para conteúdo

Arquivado

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

SinoP

Posicionamento de fotos e salvar ordem.

Recommended Posts

Bom dia pessoal.

Estou com um problema para salvar a ordem das fotos de uma galeria.

Utilizo um jQuery que possibilita ao usuário posicionar os elementos dentro de uma especificada DIV.

Após este posicionamento o usuário deve clicar em um botão para salvar a atual posição das fotos.

Acontece que quando são poucas fotos ele grava no banco sem problemas, mas quando são mais de 10 fotos ele não consegue gravar todas.

O código que utilizo para fazer a varredura e salvar a ordem é o seguinte:

//função que salva a ordem das fotos

function salvaOrdem(){
	ordem = 0;
	sucesso = 0;
	erro = 0;
	
        //Aqui o jQuery corre o código procurando os elementos <li>
	$('li').each(function() {
                //inicia a contagem da ordem
		ordem++;
                //pega a id da foto
		$this = $(this); 
		idFot = $this.attr('idbanco'); 

                //inicia o envio de uma requisição ajax para gravar a ordem no banco
		var req = null;
		
		Url = "grava_ordem.php?id="+idFot+"&ordem="+ordem;
		
		if(window.XMLHttpRequest){
		
			req = new XMLHttpRequest();
			if (req.overrideMimeType) 
			{
				req.overrideMimeType('text/xml');
			}
		} 
		else if (window.ActiveXObject) 
		{
			try {
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e)
			{
				try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}

		req.onreadystatechange = function(){
		 
			if(req.readyState == 4){
				if(req.responseText=='sucesso'){
					sucesso++;
				}else{
					erro++;
				}	
			} 
		};
		
		req.open("GET", Url, true); 
		req.send(null);

	});

	totalFotos = document.getElementById('qtdFot').value;

        //se a variavel ordem chegar a mesma quantidade de fotos ele intende que finalizou a contagem
	if(ordem==totalFotos){
		setTimeout('window.location.reload()', 100);
	}
}

O problema é que quando eu inicio a função salva_ordem() o Java Script corre o código rapidamente e não espera o ajax retornar "sucesso" ou "erro" para executar o próximo elemento.

Por isso de funcionar com poucas fotos, que na verdade gera poucos elementos.

 

Preciso saber como executar 1 a 1 esperando o resultado do Ajax.

 

Muito obrigado. Caso não entenda o que escrevi informe o que precisa saber para me auxiliar, não sou muito bom em explicações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salva todos em uma só requisição cara..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo William Bruno.

Acabei de fazer todos em uma só requisição.

Segue abaixo o script corrigido:

function salvaOrdem(){
	
	Url = "grava_ordem.php?ID=";
	
	$('li').each(function() {
		$this = $(this); 
		idFot = $this.attr('idbanco'); 

		Url = Url+"-"+idFot;
	});
	
	alert(Url);
	
	req = null;
	
	if(window.XMLHttpRequest){
	
		req = new XMLHttpRequest();
		if (req.overrideMimeType) 
		{
			req.overrideMimeType('text/xml');
		}
	} 
	else if (window.ActiveXObject) 
	{
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e)
		{
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	req.onreadystatechange = function(){
	 
		if(req.readyState == 4){
			if(req.responseText!=''){
				setTimeout('window.location.reload()', 1000);
			}	
		} 
	};
	
	req.open("GET", Url, true); 
	req.send(null);

}

Obrigado pela ajuda William Bruno.

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.