Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

jQuery II - Enviando dados com POST erro Id

Boa tarde,

Toda vez que tento sincronizar os dados com o servidor, no cmd do node me é gerado seguinte erro:

TypeError: Cannot read property '_id' of undefined
4 respostas

Olá Raquel, Pode postar o código do seu arquivo .js por favor ?

solução!

Bom dia,

Aqui está o código da função:

$('#botao-sync').click(sincronizarPlacar);

function sincronizarPlacar() {
  var placar = [];
  var linhas = $('tbody>tr');

   linhas.each(function() {
     var usuario = $(this).find('td:nth-child(1)').text();
     var palavras = $(this).find('td:nth-child(2)').text();

     var score = {
       usuario:usuario,
       pontos:palavras
     };

     placar.push(score);

     var dados = {
       placar: placar
     };

     $.post('http://localhost:3000/placar'), dados, function() {
       console.log('Placar sincronicado com sucesso');
     };
  });

Olhando o código, o que eu entendi é que você pega todas as linhas de uma tabela, e para cada uma, cria um objeto score com usuário e nome. Esse objeto você guarda num array fora do loop chamado placar. Para cada linha, você posta o array atualizado para o seu servidor, dentro do objeto dados.

Não vejo um erro neste JS, como você comentou um problema no terminal, creio que no lado do server que está o problema.

Eu achei uma descrição de erro igual a sua, veja se este link te ajuda:

http://stackoverflow.com/questions/18542329/typeerror-cannot-read-property-id-of-undefined

Olá Raquel,

Este erro está na sua função, que para cada linha você envia um POST.

O certo seria enviar o POST apenas depois que o each() terminar. Tente substituir sua função por esta, já corrigida:

$('#botao-sync').click(sincronizarPlacar);

function sincronizarPlacar() {
    var placar = [];
    var linhas = $('tbody>tr');

    linhas.each(function() {
        var usuario = $(this).find('td:nth-child(1)').text();
        var palavras = $(this).find('td:nth-child(2)').text();

        var score = {
            usuario:usuario,
            pontos:palavras
        };

        placar.push(score);
    });
    var dados = {
        placar: placar
    };

    $.post("http://localhost:3000/placar", dados, function(){
        console.log("Placar sincronizado com sucesso");
    });
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software