Ir para conteúdo

Arquivado

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

sNniffer

Receber JSON

Recommended Posts

Opa,

Tenho uma página em que é executado um SetInterval de segundos em javascript, esta página captura os dados das divs e envia via post, sendo que estes dados enviados não são fixos, as vezes, pode ser enviado 1 ou mais de um. O valor de retorno em json deve ser enviado as divs contidas na div maior.
O formato de envio é :
function atualizaregistro()
{
    $.ajaxSetup({
        cache: false
    });
    var registros = $('.coupon_item').get().map(function(el) {
        return el.id;
    });

    if (registros)
	{
        $.ajax({
            url: '_files/_update_information.php',
            dataType: 'json',
            type: 'POST',
            data: {registro_id: JSON.stringify(registros)},

                success: function (data)
                {
					registros.forEach(function(id, i)
					{
							
						$('#' + id).find('.coupon-price').html(data[i].registro.preco);
						$('#' + id).find('.coupon-user').html(data[i].registro.usuario_nome);

					});

 
                },
				error: function (XMLHttpRequest, textStatus, errorThrown) {

                }
            }); 
	}
	setTimeout('atualizaregistro()', 1000);
	
}
			
			
			
$(document).ready(function() {
	atualizaregistro();
});

E no PHP.

$registros = json_decode($_POST['registro_id']);

foreach($registros as $registro_id)
{

 . .. .. .. 


  $retorno_send = '{"registro":{"preco":"'.$preco.'","usuario_nome":"'.$username.'"}}';
}


echo "[".$retorno_send."]";

O problema é; Se envio apenas um ID para o php o json é enviado corretamente, mas, se é enviado mais de um ID o php recebe os ID, mas, é reenviado para o javascript apenas as informações referentes ao último ID enviado.

Ex.: Ao enviar os ID 1 e 3, o foreach é executado e envia os dados apenas referente ao 3.

O que há de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O seu php está errado. Você está sobrescrevendo a variável dentro do loop, em vez de concatenar.

Aqui o erro:

$retorno_send = '{"registro":{"preco":"'.$preco.'","usuario_nome":"'.$username.'"}}';
você deveria concatenar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show de bola William, não querendo abusar muito do seu conhecimento.

O retorno está vindo corretamente do PHP, mas o javascript não está enviando os dados recebidos para as divs, simplesmente não acontece nada nas divs, mas, se é enviado apenas um valor para o php, os dados das divs são atualizados corretamente.


success: function (data)
{

registros.forEach(function(id, i)

{

$('#' + id).find('.coupon-price').html(data.registro.preco);

$('#' + id).find('.coupon-user').html(data.registro.usuario_nome);
});

}

Com isso o valor retornado de cada item do json deveria ir para sua respectiva div, mas, não vai, pode salvar minha pele ?

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que tá vindo aqui:

success: function (data) {
console.log(data);
console.log(registros.length);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao adicionar este código e ser enviado apenas um ID, está retornando:

registro Object { preco="R$ 22,79",  usuario_nome="my_name"}

e o JSON recebido é:

[{"registro":{"preco":"R$ 22,79","usuario_nome":"my_name"}}]

Ao ser enviado dois, não retorna o 'registro Object ', consultando o json retornado, vem:

[{"registro":{"preco":"R$ 22,79","usuario_nome":"my_name"}}{"registro":{"preco":"R$ 4,62","usuario_nome"
:"sNniffer"}}]

O post enviado é

registro_id ["1","3"]

Compartilhar este post


Link para o post
Compartilhar em outros sites

a concatenação ainda está errada.

você deveria colocar uma vírgula entre cada registro.

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.