Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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
o que tá vindo aqui:
success: function (data) {
console.log(data);
console.log(registros.length);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"]
a concatenação ainda está errada.
você deveria colocar uma vírgula entre cada registro.
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