Ir para conteúdo

Arquivado

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

mruoppolo

Erro de requisição

Recommended Posts

Galera tudo bem??

 

Eu preciso enviar os dados de um array php através de uma requisição ajax para a página compras.php, porém deve haver um loop que para cada dado do array ele faça uma requisição diferente.

 

Então eu peguei todos os dados do array php e transformei em um array javascript, consegui fazer o laço de repetição também tranquilamente, porém não consigo fazer a requisição, eu sei que o laço funciona porque troquei o código da requisição por um alert() printando todos os dados do array e funcionou ele abriu uma caixa para cada array, é só a requisição que não funciona

 

Página que tem a requisição é a seguinte:

<?php
		if(isset($_GET['finalizaCompra']) && $_GET['finalizaCompra'] == true){
		$array = implode("|", $_SESSION['product']);
	?>
	<script>
		//variáveis
		var i, array_produtos, string_array;
		//recebe a string com elementos separados, vindos do PHP
		string_array = '<?php echo $array; ?>';
		//transforma esta string em um array próprio do Javascript
		array_produtos = string_array.split('|');

		//varre o array só pra mostrar que tá tudo ok
		for (i in array_produtos){	
			$.ajax({
			   "url": "../compras.php",
			   "method": "get",
			   "data": "action=add&product_id="+ array_produtos[i];
			   }).send();
				success: function(resposta) {
			    alert("Funcionou "+ array_produtos[i]);
			  },
			  error: function() {
			    alert("Falhou "+ array_produtos[i]);
			  }
		  });
		}
		window.location='../compras.php';
	</script>
	<?php } ?>

Porém ele não envia e a entrega para o cliente é agora as 10 da manhã, não tenho ideia de como fazer funcionar isso, alguém pode me ajudar por favor??

 

Valew ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tira o window.location e veja o que aparece no console de erros.

 

Ctrl + Shift + J do Firefox ou Chrome.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Removi o window.location e no console de erro apareceu o seguinte:

wOV1wvj.pngValew mesmo pelo empenho em me ajudar


Eu achei também em um livro que tenho aqui uma função ajax que eu tentei implementar mas também não funcionou, eu pensei em fazer toda a requisição pela função e incluir dentro do loop só a chamada da função, mas também não deu se quiser eu posto aqui a função

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está vendo os erros de cross origin ai ?

fora isso tem vários erros de sintaxe.. qual é a linha 22 do arquivo index.php ?

 

note que, esse }).send(); não faz sentido se você tiver utilizando $.ajax() (ele não possui esse send)

 

e todos os caras ali, success e error estão jogados no lugar errado.

Tente corrigir se guiando pelo console de erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então é que na verdade eu não entendo nada de javascript, o cliente inventou isto ai de ultima hora, ai no caso, pra mim este console de erros fala grego, kkkkkk

 

a linha 22 é a seguinte:

var i, array_produtos, string_array;
//recebe a string com elementos separados, vindos do PHP
string_array = '<?php echo $array; ?>';

a linha 22 é o comentário "recebe a string com elementos separados"

 

Este .send é de um código que eu copiei da internet, assisti algumas videoaulas pra tentar entender o funcionamento do ajax, mas não consigo compreender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai no código fonte do browser e veja lá a linha 22.

Não no arquivo fonte php.. hehe, tem diferença..

 

deixa assim:

	<script>
		//variáveis
		var i, array_produtos, string_array;
		//recebe a string com elementos separados, vindos do PHP
		string_array = '<?php echo $array; ?>';
		//transforma esta string em um array próprio do Javascript
		array_produtos = string_array.split('|');

		//varre o array só pra mostrar que tá tudo ok
		for (var produto in array_produtos){	
			$.ajax({
			   "url": "../compras.php",
			   "method": "get",
			   "data": "action=add&product_id="+ produto,
                           "success": function(resposta) {
			      alert("Funcionou "+ produto);
			   },
			   "error": function() {
			      alert("Falhou "+ produto);
			   }
                         });       
		  }
		// window.location='../compras.php';
	</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkk, não sabia que tinha esta diferença, kkkk, mas é por causa dos arquivos que vem com include né??

 

Bom então não funcionou ainda, ele não abriu os alerts nem para o erro, nem para o sucesso, porém o console de erros diminuiu muito

F1nO0Et.png

 

Esta linha 29 do index.php no console é:

                           "success": function(resposta) {
			      alert("Funcionou "+ array_produtos[i]);
			   },
			   "error": function() {
			      alert("Falhou "+ array_produtos[i]);
			   }
                         );       
		  }
		// window.location='../compras.php';

Eu coloquei um } na linha 29, ai agora só mostra 3 erros

 

sdedwCN.png

 

A linha 19 é esse $.ajax


Esse javascript tem que ser rodado dentro de um arquivo .js????

 

Porque ele esta direto dentro do index.php eu só penso no caso de que se fosse necessário eu utilizar um arquivo .js externo, como eu passaria o valor da session, afinal eu não posso inserir um session_start() dentro do arquivo .js né


Eu removi do final da página a chamada do jquery e coloquei ela no inicio da página, ai ele parou de exibir o erro:

 

ReferenceError: $ is not defined

 

Porém ainda não executa a requisição :/


Esta quase, neste momento o código esta assim:

<script>
		//variáveis
		var i, array_produtos, string_array;
		//recebe a string com elementos separados, vindos do PHP
		string_array = '<?php echo $array; ?>';
		//transforma esta string em um array próprio do Javascript
		array_produtos = string_array.split('|');

		//varre o array só pra mostrar que tá tudo ok
		for (var produto in array_produtos){	
			$.ajax({
			   "url": "http://www.pointdopc.com.br/compras.php",
			   "method": "get",
			   "data": "action=add&product_id="+ array_produtos[produto],
               "success": function(resposta) {
			      alert("Funcionou "+ array_produtos[produto]);
			   },
			   "error": function() {
			      alert("Falhou "+ array_produtos[produto]);
			   }
                         });       
		  }
		window.location='../compras.php';
	</script>

Ai ele até consegue jogar o produto no carrinho de compras, porém, ele exibe 2 caixas de alerta uma dizendo que funcionou e a outra dizendo que falhou e só adiciona um produto no carrinho, se tiverem 2 produtos ele não envia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bem!! parabéns cara... hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkkk, mas não ta funcionando ainda não, as vezes ele manda pro carrinho e as vezes não, agora por exemplo ele falou funcionou mas não enviou para o carrinho.

 

Outra coisa que percebi é que eu seleciono 2 produtos diferentes, ou seja, deveriam haver 2 ids diferentes, porém ele abre 2 caixas de alerta só que mostrando o mesmo id


Caramba agora ele fica falando que funcionou, porém além de não enviar para o carrinho de compras ele não muda a id, se eu seleciono 2 produtos ele abre 2 caixas de alerta, mas as 2 mostrando a mesma id


se no final do loop eu coloco produto++; para incrementar o valor do loop ele coloca o loop como undefined


agora simplesmente não envia mais nada :/ q doidera as vezes envia e as vezes não


Não funciona mais nada e mesmo eu copiando e voltando para o código que funcionou antes, ele não esta funcionando mais, alguém tem alguma ideia, por favor??

 

http://www.pointdopc.com.br/monte-seu-pc-3

 

Obrigado :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

O location impede o ajax de ter tempo de fazer o trabalho dele.

 

Por isso está nessa intermitência: as vezes ele é mais rápido que o location, as vezes não.

Entendeu ?

 

Sobre repetir o id do produto, reveja o seu loop. Pq vc fez assim ?

Está utilizando errado o for in, veja no meu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas mesmo que eu tire o location e deixe executar o código inteiro, depois que fecho todas as alerts eu vou para o carrinho de compras manualmente e não tem nada la.

 

No seu código esta assim:

                 for (var produto in array_produtos){	
			$.ajax({
			   "url": "../compras.php",
			   "method": "get",
			   "data": "action=add&product_id="+ produto,
                           "success": function(resposta) {
			      alert("Funcionou "+ produto);
			   },
			   "error": function() {
			      alert("Falhou "+ produto);
			   }
                         });       
		  }

O for funciona normal, porém esses lugares onde chama a variavel produto fica tudo com id 1, não fica o id do produto, ai eu to deixando como array_produtos[produto], ai ele pega a id, mas ele não incrementa ela, mostra sempre a mesma :/


joguei o location para o final da página para esperar ele fechar todas as caixas de alerta e tudo mais pra dar tempo de fazer as requisições, porém, não funcionou mesmo assim :/


Outra coisa que eu percebo é que ele pega apenas o último id, tanto é que quando ele cadastrou alguns produtos era sempre o último produto, é como se o loop não funcionasse


Eu troquei o laço de repetição por:

 

var size = array_produtos.length;
for (i=0; i<=size; i++){
mas não esta funcionando, tem alguma coisa errada ai??

Compartilhar este post


Link para o post
Compartilhar em outros sites

AJAX é assincrono, então não adianta vc jogar o location para o fim da página, ainda não vai dar tempo do ajax ir e voltar.

 

Depende, como está o teu código agora ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ja desisti daquele laço for e voltei para o que estava antes, ja estou começando a ficar sem ideias, kkkk, pior que ja atrasei, era pras 10 da manhã.

<script>
		//variáveis
		var i, array_produtos, string_array;
		//recebe a string com elementos separados, vindos do PHP
		string_array = '<?php echo $array; ?>';
		//transforma esta string em um array próprio do Javascript
		array_produtos = string_array.split('|');

		//varre o array só pra mostrar que tá tudo ok
		for (var produto in array_produtos){	
			$.ajax({
			   "url": "http://www.pointdopc.com.br/compras.php",
			   "method": "get",
			   "data": "?action=add&product_id="+ array_produtos[produto],
               "success": function(resposta) {
			      alert("Funcionou "+ array_produtos[produto]);
			   },
			   "error": function() {
			      alert("Falhou "+ array_produtos[produto]);
			   }
            });       
		  }		
	</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte:

 

array_produtos = string_array.split('|');
console.log('string_array', string_array);
console.log('array_produtos', array_produtos);


//varre o array só pra mostrar que tá tudo ok
for (var produto in array_produtos){
console.log('produto', produto);
console.log('array_produtos[produto]', array_produtos[produto]);

E poste aqui o que aparecer no console. Assim vc vai entender melhor com o que está lidando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara pior que não apareceu nada de revelante, veja:

9wFkwyT.png

 

Eu modifiquei no código, mas veja se não fiz algo errado, veja como ficou:

<script>
		//variáveis
		var i, array_produtos, string_array;
		//recebe a string com elementos separados, vindos do PHP
		string_array = '<?php echo $array; ?>';
		//transforma esta string em um array próprio do Javascript
		array_produtos = string_array.split('|');
		console.log('string_array', string_array);
		console.log('array_produtos', array_produtos);


		//varre o array só pra mostrar que tá tudo ok
		for (var produto in array_produtos){
		console.log('produto', produto);
		console.log('array_produtos[produto]', array_produtos[produto]);
			$.ajax({
			   "url": "http://www.pointdopc.com.br/compras.php",
			   "method": "get",
			   "data": "?action=add&product_id="+ array_produtos[produto],
               "success": function(resposta) {
			      alert("Funcionou "+ array_produtos[produto]);
			   },
			   "error": function() {
			      alert("Falhou "+ array_produtos[produto]);
			   }
            });       
		  }		
	</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho.. para de declarar a url completa

"url": "http://www.pointdopc.com.br/compras.php",
eu já te falei que isso é bloqueado pelo cross origin. Não declare a URL completa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está o código agora ?

o erro ainda é devido a url completa. Limpe o seu cache, e verifique a url.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu limpei o cache ai ficou assim:

 

k2oNyvw.png

 

Código assim:

	<script>
		//variáveis
		var i, array_produtos, string_array;
		//recebe a string com elementos separados, vindos do PHP
		string_array = '<?php echo $array; ?>';
		//transforma esta string em um array próprio do Javascript
		array_produtos = string_array.split('|');
		console.log('string_array', string_array);
		console.log('array_produtos', array_produtos);


		//varre o array só pra mostrar que tá tudo ok
		for (var produto in array_produtos){
		console.log('produto', produto);
		console.log('array_produtos[produto]', array_produtos[produto]);
			$.ajax({
			   "url": "../compras.php",
			   "method": "get",
			   "data": "?action=add&product_id="+ array_produtos[produto],
               "success": function(resposta) {
			      alert("Funcionou "+ array_produtos[produto]);
			   },
			   "error": function() {
			      alert("Falhou "+ array_produtos[produto]);
			   }
            });       
		  }		
	</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba tentei o dia todo e nada :/


Eu estava analisando o console de erros do chrome e vi que a requisição esta sendo enviada:

GFLMJU4.png

E cada requisição esta indo com um produto diferente, ou seja, esta certinho, agora não consigo entender porque o carrinho de compras continua vazio :/


Cara descobri é realmente a questão do tempo que você falou, eu percebi que se eu clico em finalizar compra diversas vezes ele coloca tudo no carrinho, então provavelmente é o lance do tempo, mas como eu posso resolver isso do tempo??

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.