Ir para conteúdo

Arquivado

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

Guilherme Luiz

Requisição $http assincronica AngularJS

Recommended Posts

Pessoal eu tenho uma seguinte requisição $http no angular

 

 //send  data
  $scope.send = function(){
    var manual        = $("#origin_1").prop("checked");
    var agenda        = $("#origin_2").prop("checked");
    var grupo         = $("#origin_3").prop("checked");
    var expressa      = $("#origin_4").prop("checked");
    var flash         = $("#flash").prop("checked");
    var modelo        = $("#salvar_modelo").prop("checked");
    var twoways       = $("#2ways").prop("checked");
    var rota          = $("#rota").prop("checked");
    var twoways_email = $("#2ways_email").val();
    var twoways_url   = $("#2ways_url").val();
    var destinatario  = $('#destManual').tagsinput('items');
    var etiqueta      = $("#etiquetas").tagsinput('items');
    var campanha      = $('#campaingName').val();
    var remetente     = $('#remetente_text').val();
    var ddi           = $("#pais").val();
    var pais          = $("#pais option:selected").text();
    var texto         = $("#smsText").val();
    var programaData  = $("#schedule_date").val();
    var programaHora  = $("#schedule_time").val();
    var programaZone  = $("#schedule_timezone option:selected").text();
  swal({
  title: 'Iniciar envio da campanha?',
  text: "Ao confirmar, o processo não poderá ser pausado e/ou cancelado",
  type: 'warning',
  showCancelButton: true,
  confirmButtonColor: '#3085d6',
  cancelButtonColor: '#d33',
  confirmButtonText: 'Sim, iniciar!',
  cancelButtonText: 'Não, espere!',
  confirmButtonClass: 'btn btn-sweet btn-success',
  cancelButtonClass: 'btn btn-sweet btn-danger',
  padding: '20',
  buttonsStyling: false
}).then(function () {
  swal(
    {
    title: 'Campanha iniciada!',
    text: "Sua campanha está sendo disparada. Não saia desta página enquanto processamos todos os dados.",
    showCancelButton: false,
    showConfirmButton: false,
    imageUrl: "https://smsfire.com.br/portal/includes/images/loader.gif",
    timer: 5000
    }
  ),
  $http({
    url: "/portal/includes/modules/sms/send-campaing.php",
    method: "POST",
    headers: {'Content-Type': 'application/json'},
    data: {
      origem:[{
        manual:manual,
        agenda:agenda,
        grupo:grupo,
        expressa:expressa
        }
      ],
      pais:pais,
      ddi:ddi,
      destinatario:destinatario,
      texto:texto,
      campanha:campanha,
      modelo:modelo,
      etiqueta:etiqueta,
      programa:[{
        data:programaData,
        hora:programaHora,
        zone:programaZone
        }
      ],
      rota:rota,
      remetente:remetente,
      flash:flash,
      modelo:modelo,
      twoways:[{
        ativa:twoways,
        email:twoways_email,
        url:twoways_url
      }]
    } }.then(function (response) {
      swal({
        title:'Envio finalizado!',
        text:'O processamento da campanha foi concluído. Acesse o menu Estatísticas para obter detalhes',
        type: 'success'
      })
    }).then(function (){
      $timeout(function () {
      location.reload();
    }, 3000);
    })
}, function (dismiss) {
  // dismiss can be 'cancel', 'overlay',
  // 'close', and 'timer'
  if (dismiss === 'cancel') {
    swal(
      'Cancelado!',
      'O processamento da campanha foi cancelado.',
      'error'
    )
  }
});
  });

O que ela faz?
Emito um alert perguntando se posso processar a campanha.

Usuario clica SIM e chamo o arquivo PHP para processar a requisição.

Assim que a requisição for completada imprimo outro alert com timeout de 3seg e recarrego a pagina

 

Está funcionando?
Sim perfeitamente!

 

Qual o problema?

O tamanho da requisição!
Essa chamada pode conter uma infinidade de dados que, talvez, demore mais que os 90 segundos de timeout que meu servidor tem no PHP para recuperar o response.
O script, segue fazendo a requisição passados os 90segundos, mas ao tentar imprimir o response, tenho erro 500-timeout.

 

O que estou precisando

Realizar uma chamada assincronica, ou seja, deixar que o meu sistema continue rodando enquanto essa requisição $http fique rodando em background.

 

Como tentei:

No meu php tentei utilizar o session_write_close() porem isso faz com que as SESSIONS sejam deletadas e todo o meu processo de looping é dado como TRUE já que tenho condicionamentos baseado em alguns parametros da session. Desta forma funciona mas não da forma que preciso.

 

Na propria requisição $http há algum parametro que eu possa indicar para que pelo JS seja compreensivel que a requisição é assincronica?
Eu não consegui encontrar detalhes deste tipo na documentação do angular.

 

Alguma sugestão?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

por padrão a requisição é assíncrona.

da forma que está ela é assíncrona.

 

https://docs.angularjs.org/api/ng/service/$http

Compartilhar este post


Link para o post
Compartilhar em outros sites

É como o @William Bruno disse, já é assíncrono.

 

Seu objetivo é alternar de controller e manter a execução em background?

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, hargon disse:

É como o @William Bruno disse, já é assíncrono.

 

Seu objetivo é alternar de controller e manter a execução em background?

 

Exato.

Minha pagina não sai da requisição atual até ter o response do $http

Eu atualizei o código mas ele segue aguardando o response para poder atualizar a pagina

  $scope.sendSMS = function(){
    
    ...
    
  swal({
  title: 'Iniciar envio da campanha?',
  text: "Ao confirmar, o processo não poderá ser pausado e/ou cancelado",
  type: 'warning',
  showCancelButton: true,
  confirmButtonColor: '#3085d6',
  cancelButtonColor: '#d33',
  confirmButtonText: 'Sim, iniciar!',
  cancelButtonText: 'Não, espere!',
  confirmButtonClass: 'btn btn-sweet btn-success',
  cancelButtonClass: 'btn btn-sweet btn-danger',
  padding: '20',
  buttonsStyling: false
}).then(function () {
  $http({
    url: "/portal/includes/modules/sms/send-campaing.php",
    method: "POST",
    headers: {'Content-Type': 'application/json'},
    data: {
      origem:[{
        manual:manual,
        agenda:agenda,
        grupo:grupo,
        expressa:expressa
        }
      ],
      pais:pais,
      ddi:ddi,
      destinatario:destinatario,
      texto:texto,
      campanha:campanha,
      modelo:modelo,
      etiqueta:etiqueta,
      programa:[{
        data:programaData,
        hora:programaHora,
        zone:programaZone
        }
      ],
      rota:rota,
      remetente:remetente,
      flash:flash,
      modelo:modelo,
      twoways:[{
        ativa:twoways,
        email:twoways_email,
        url:twoways_url
      }]
    }
  }),
  swal(
    {
    title: 'Campanha iniciada!',
    text: "Sua campanha está sendo disparada. Não saia desta página enquanto processamos todos os dados.",
    showCancelButton: false,
    showConfirmButton: false,
    imageUrl: "https://smsfire.com.br/portal/includes/images/loader.gif",
    timer: 5000
  }).catch(function () {
    swal({
      title:'Envio finalizado!',
      text:'O processamento da campanha foi concluído. Acesse o menu Estatísticas para obter detalhes',
      type: 'success'
    }).then(function (){
      location.reload();
      /*-----------------------------------------------------------------------------------
      ESTE RELOAD SOMENTE ACONTECE APOS A PAGINA REQUISITADA NO $HTTP ENVIAR UM RESPONSE.
      -----------------------------------------------------------------------------------*/
    });
}), function (dismiss) {
  // dismiss can be 'cancel', 'overlay',
  // 'close', and 'timer'
  if (dismiss === 'cancel') {
    swal(
      'Cancelado!',
      'O processamento da campanha foi cancelado.',
      'error'
    ).catch(swal.noop);
    }
  }
});
}
});

E como essa requisição pode acontecer 1.000.000.000 de vezes, se em tela o meu script ficar aguardando o response eu terei timeout do servidor.

 

Preciso que enquanto o servidor processa tudo o que foi enviado no $http, meu usuario fique livre para navegar na plataforma, só que da forma atual a pagina fica aguardando o response do $http.

 

Se eu fechar o browse e acompanhar via registros no BD, as requisições sao formalizadas corretamente, mas isso nao pode acontecer se nao meu usuario pensará que minha plataforma está travando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está utilizando AngularJs 1, correto?

 

Uma saída seria realizar essa chamada dentro do método ".run()" (uma maneira de torná-la global) ... mas não é recomendável trabalhar assim, se você tiver que fazer isso com todas as chamadas, terá que buscar uma solução melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites
27 minutos atrás, hargon disse:

Você está utilizando AngularJs 1, correto?

 

Uma saída seria realizar essa chamada dentro do método ".run()" (uma maneira de torná-la global) ... mas não é recomendável trabalhar assim, se você tiver que fazer isso com todas as chamadas, terá que buscar uma solução melhor.

vou testar este metodo.

E não será em todas... é só em algumas especificas que eu preciso disso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Em 25/09/2017 at 12:40, Guilherme Luiz disse:

Sempre que faço a requisição do $http o meu browse fica esperando o response para poder realizar qualquer outra ação.

Cara não faz sentido...

A própria documentação afirma que é Asyn.

 

Você faz uso de Interceptors?

Pode ser esse swal() tmb...

 

 

Enfim, de qualquer forma não é uma boa ideia 'esperar' o resultado disso.

 

Já ouviu falar em 'filas'?

A Amazon tem uma opção legal:

https://aws.amazon.com/pt/sqs/

 

 

Está como seu Back em php? Laravel? É easy-easy configurar:

 

https://laravel.com/docs/5.5/queues

 

 

Assim basicamente você ia startar o serviço e enquanto roda background você pode ficar perguntando com o Angular se o php já terminou de processar aquela fila.

 

https://docs.angularjs.org/api/ng/service/$interval

 

 

Essa fila é sobre E-mail?

mailgun.com é sucesso, ou até mesmo a Amazon4Win

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citar

 

Está como seu Back em php? Laravel? É easy-easy configurar:

 

https://laravel.com/docs/5.5/queues

 

 

Está em PHP estruturado.

 

17 horas atrás, gabrieldarezzo disse:

Assim basicamente você ia startar o serviço e enquanto roda background você pode ficar perguntando com o Angular se o php já terminou de processar aquela fila.

Vou checar essa função do angular

 

17 horas atrás, gabrieldarezzo disse:

Essa fila é sobre E-mail?

É disparo de SMS em massa. Como cada SMS tem parametros distintos com resultados dinamicos eu não consigo fazer requisições fora de loop continuo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada feito!

Este meu código a requisição fica em async mas ao tentar atualizar a pagina ela não atualiza porque fica esperando um response do $http.

 

Alguem pode me dar uma luz de como executar o $http do angularjs ignorando o seu response e deixando assim que a minha pagina seja atualizada?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Air-Gear
      Olá, na parte de enviar eu conseguir, mas manter até terminar o cadastro eu não conseguir. Eu vou contar toda a história para ficar mais claro possível.
       
      Eu precisei implementar um Upload de qualquer imagem ou PDF na página de solicitar compras. O site utiliza AngularJS, a primeira versão do Angular. Eu tentei fazer sem depender de PHP, mas na internet achava só a parte de Front-End e ninguém sabia fazer no Back-End. Então eu resolvi fazer com PHP mesmo.
       
      Nó código PHP, ele aceita todos as extensões de imagens mais o PDF e é possível envia-los todos de uma vez na quantidade que quiser. Todos os arquivos serão renomeados, contendo no nome o ID do usuário logado pego pela função javascript, o dia do mês, o mês, o ano, o dia da semana, a hora, o minuto, o segundo, se é AM ou PM e uma numeração aleatório. O arquivo PDF vai continuar sendo PDF e todas as imagens serão JPG. No final, todos serão enviados para uma pasta chamada upload.
       
      Só que agora eu preciso jogar de volta para página para salvar os novos nomes dos arquivos para continuar o cadastro da solicitação de compras. Como AngularJS utiliza Javascript, eu tentei usa-lo dentro do PHP utilizando EOF, mas não tive resultado. Eu só consigo com HTML com as diretivas do AngularJS. Na parte do API, nos atributos, eu declarei "nomeArquivo: []," , para salvar os nomes dos arquivos.
       
      Seguem o código.
      <div class="row"> <div class="col-sm-12 col-md-6 "> <div class="upload_form_cont"> <form id="upload_form" enctype="multipart/form-data" method="post" action="/profile-upload"> <div> <div><label for="image_file">Selecione o arquivo de imagem</label></div> <div><input type="file" name="image_file" id="image_file" accept="image/*" onchange="fileSelected();" /></div> </div> <div> <input type="button" value="Upload" onclick="startUploading()" /> </div> <div id="fileinfo"> <div id="filename"></div> <div id="filesize"></div> <div id="filetype"></div> <div id="filedim"></div> </div> <div id="error">Você deve selecionar apenas arquivos de imagem válidos!</div> <div id="error2">Ocorreu um erro ao enviar o arquivo</div> <div id="abort">O upload foi cancelado pelo usuário ou o navegador interrompeu a conexão</div> <div id="warnsize">Seu arquivo é muito grande. Não podemos aceitar isso. Selecione arquivos pequenos</div> <div id="progress_info"> <div id="progress"></div> <div id="progress_percent">&nbsp;</div> <div class="clear_both"></div> <div> <div id="speed">&nbsp;</div> <div id="remaining">&nbsp;</div> <div id="b_transfered">&nbsp;</div> <div class="clear_both"></div> </div> <div id="upload_response"></div> </div> </form> </div> </div> </div> upload.php
      <?php function bytesToSize1024($bytes, $precision = 2) { $unit = array('B','KB','MB'); return @round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i]; } //Pega o id do usuário logado $id_url = $_GET['id']; // Numero de campos de upload $numeroCampos = count($_FILES['image_file']['name']); // Tamanho máximo do arquivo (em bytes) $tamanhoMaximo = 1024*1024*2; // Extensões aceitas $extensoes = array(".jpg", "jpeg", ".gif", ".png", ".pdf", ".bmp", ".pdf", ".tiff"); //Local da pasta $_UP['pasta'] = '../upload/'; $substituir = false; for ($i = 0; $i < $numeroCampos; $i++) { // Informações do arquivo enviado $sFileName = $_FILES['image_file']['name'][$i]; $sSize = $_FILES['image_file']['size'][$i]; $sFileSize = bytesToSize1024($sSize, 1); $nomeTemporario = $_FILES['image_file']['tmp_name'][$i]; // Verifica se o arquivo foi colocado no campo if (!empty($sFileName)) { $erro = false; // Verifica se o tamanho do arquivo é maior que o permitido if ($sSize > $tamanhoMaximo) { $erro = "O arquivo " . $sFileName . " não deve ultrapassar " . $tamanhoMaximo. " bytes"; } // Verifica se a extensão está entre as aceitas elseif (!in_array(strrchr($sFileName, "."), $extensoes)) { $erro = "A extensão do arquivo <b>" . $sFileName . "</b> não é válida"; } // Verifica se o arquivo existe e se é para substituir elseif (file_exists($_UP['pasta'] . $sFileName) and !$substituir) { $erro = "O arquivo <b>" . $sFileName . "</b> já existe"; } else{ //Pega a extensão do arquivo $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta // Primeiro verifica se deve trocar o nome do arquivo $unixTime = time(); $timeZone = new \DateTimeZone('America/Sao_Paulo'); $time = new \DateTime(); $time->setTimestamp($unixTime)->setTimezone($timeZone); $formattedTime = $time->format('d-m-Y_l_h-i-s-a'); $aleatorio = rand(); if($TipoExtensao == 'pdf'){ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.pdf'; }else{ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.jpg'; } // Depois verifica se é possível mover o arquivo para a pasta escolhida if (move_uploaded_file($nomeTemporario, $_UP['pasta'] . $nome_final)) { // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo echo "Upload do arquivo ".$sFileName." foi efetuado com sucesso!"; echo "</br>"; echo<<<EOF <p>Eu tentei implementar o retorno da página aqui!</p> <p></br></p> <p></br></p> EOF; } else { // Não foi possível fazer o upload, provavelmente a pasta está incorreta echo "Não foi possível enviar o arquivo, tente novamente"; echo "</br>"; } } } else { echo "Selecione algum arquivo de imagem ou PDF para fazero upload."; } } ?>  
    • Por marcelobbt
      Eu estou montando um form para editar alguns dados, então uso o PHP/Codeigniter para montar a página com as informações. Acontece que existem umas caixas de escolha que possuem um código em AngularJS para executar uma fórmula e quando coloco o "ng-model", simplesmente some o item que deveria estar marcado.
       
      Segue parte do form abaixo:
      <div class="form-group"> <label>Trajetória:</label> <?php echo form_input(array('type'=>"text", 'class'=>"form-control", 'name'=>'trajetoriaform','id'=>'trajetoriaform'),$riscoBD->__get('trajetoria')); ?> </div> <div class="form-group"> <label>Frequência:</label> <?php echo form_dropdown(array('class'=>"form-control", "ng-model"=>"frequencia", "ng-change"=>"calcRisco()", 'name'=>'frequenciaform','id'=>'frequenciaform'), $frequencia, $riscoBD->__get('frequencia')); ?> </div> <div class="form-group"> <label>Probabilidade:</label> <?php echo form_dropdown(array('class'=>"form-control", "ng-model"=>"probabilidade", "ng-change"=>"calcRisco()", 'name'=>'probabilidadeform','id'=>'probabilidadeform'), $probabilidade, set_value('probabilidadeform')); ?> </div> <div class="form-group"> <label>Severidade:</label> <?php echo form_dropdown(array('class'=>"form-control", "ng-model"=>"severidade", "ng-change"=>"calcRisco()", 'name'=>'severidadeform','id'=>'severidadeform'), $severidade, set_value('severidadeform')); ?> </div> <div class="form-group"> <label>Risco:</label> <?php echo form_input(array('type'=>"text", "ng-value"=>"resultadorisco", 'class'=>"form-control", 'name'=>'riscoform','id'=>'riscoform', "ng-model"=>"risco"),set_value('riscoform')); ?> </div>  
      Quando gera o html, ao colocar para inspecionar o código de uma das caixas o código fica assim:
      <div class="form-group"> <label>Frequência:</label> <select class="form-control" ng-model="frequencia" ng-change="calcRisco()" name="frequenciaform" id="frequenciaform"> <option value="? undefined:undefined ?"></option> <option value="1" selected="selected">Rara</option> <option value="2">Eventual</option> <option value="3">Habitual</option> <option value="4">Permanente</option> </select> </div> Essa linha "4" aparece do angularJS e é o que impede que apareça o valor selected.
       
      Queria saber se tem algum geito de fazer o javascript mostrar o valor que vem do PHP.
       
      Abaixo o script:
      var app = angular.module('risco', []); app.controller('CalculaRisco', function($scope) { $scope.frequencia; $scope.probabilidade; $scope.severidade; $scope.calcRisco = function () { var freq = parseInt ($scope.frequencia); var prob = parseInt ($scope.probabilidade); var sev = parseInt ($scope.severidade); //console.log(sev+' '+prob+' '+freq); risco = freq + prob + sev; if (risco <= 4) { $scope.risco = 'Baixo'; } else if (risco <= 7) { $scope.risco = 'M\u00e9dio'; } else if (risco <= 10) { $scope.risco = 'Alto'; } else { $scope.risco = 'Muito Alto'; } //console.log(risco+$scope.severidade); }; });  
    • Por Alex Gustavo Canalli de So
      Boa noite pessoal.

      Estou desenvolvendo uma aplicação de controle de finanças com receitas, despesas, transferências entre contas, relatórios e gráficos em angularjs + webapi + ddd + automapper + injeção de dependencias para estudo de novas tecnologias, pois trabalho atualmente com WebForms.

      Criei todas as (Domais, Applications, Services, Repository, etc).

      A minha grande dúvida é a seguinte:
      Nas telas de cadastro eu basicamente retorno o objeto inteiro no controller de cada entidade (domain), Mas na tela de gráfico por tipo de despesa por exemplo, não consigo fazer dessa forma, pois preciso retornar o valor total de despesas cadastradas para cada tipo em determinado período.
      No WebForms eu criaria uma classe personalizada com os campos necessários e faria um select new { } direto no link setando o valor de cada campo, porém, no ddd me vejo obrigado a instanciar os campos fixos do domain.
      Existe alguma forma de criar uma view personalizada para o retorno de uma consulta?
    • Por StraightFree
      Senhores, bom dia!
       
      Preciso da ajuda de vocês para tentar solucionar esse problema.
       
      Sou programador Delphi e precisei fazer o acesso aos dados gerados pelo sistema desktop pela web. 
       
      Optei por utilizar o DataSnap para criar o WebService, por já ter mais familiaridade com a ferramenta.
       
      Assim, comecei a fazer os testes para acessar o WebService através de um cliente HTML + AngularJS. Criei no DataSnap 4 webservice:
      function Produto : TJSONArray; function updateProduto(AValue: TJSONObject) : TJSONObject; function acceptProduto(AValue: TJSONObject) : TJSONObject; function cancelProduto(AKey: String) : TJSONObject; O DataSnap faz o mapeamento automático para cada uma das funções de acordo com o método HTTP chamado na requisição, conforme abaixo:
      Cliente Requisição DataSnap Chama a function GET Produto POST updateProduto PUT acceptProduto DELETE cancelProduto Se eu chamar os métodos através de um cliente Delphi chamado RestDebbuger (acompanha o delphi) ou um software de teste de webservice chamado SoapUI consigo acessar todas as funções do webservice sem nenhum problema.
       
      Criei um cliente para consumir esses webservices em HTML e JavaScript/AngularJS, nesse cliente consigo consumir sem problemas os métodos GET e POST. No entanto, quando tento acessar o método PUT ou DELETE sempre me retorna um erro 500 no servidor. Fiz o debbug da aplicação Delphi após fazer a chamada pelo cliente AngularJS e percebi que não está chegando o método ao servidor e por isso ele dá um erro na requisição. 
      Chamando esse método pelo RestDebbuger e pelo SoapUI funciona normalmente.
       
      Alguém saberia me dizer por qual motivo não consigo acessar esse método pelo angularJS?
       
      Qualquer ajuda será muito bem vinda.
       
      Obrigado!
       
    • Por vpontessilva
      Olá senhores, estou criando uma aplicação simples em AngularJS, a aplicação se resume em 3 páginas:
      1 - Aparelho: Onde a pessoa escolhe o aparelho
      2 - Planos: Escolhe o plano relacionado ao aparelho
      3 - Cadastro final informando nome, e-mail, telefone e etc...
       
      A lista de aparelhos e e de planos possiveis praquele aparelho escolhido vem de um arquivo JSON, que eu pego através de uma requisição HTTP
      A dúvida é: Eu gostaria de ir salvando essas informações, quando ele clicar em um aparelho, salvasse, depois o plano e salvasse e depois de escrever os dados
      salvasse tudo e saisse na página final e um console.log, mas como faço isso? Tô perdido.. 

      Esse é o meu arquivo api.js, onde faço a requisição dos aparelhos:
      // plataformas //arquivo api.js app.controller('plataformAPI', function($scope, $http){ $http.get('http://private-59658d-celulardireto2017.apiary-mock.com/plataformas') .then(function(response){ $scope.dados = response.data.plataformas; }); }); Esse é o arquivo home.html, onde a pessoa escolhe os aparelhos:
      <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" align="center" ng-controller="plataformAPI"> <div ng-repeat="x in dados"> <h1>{{x.nome}}</h1> <p>{{x.descricao.replace('|',' ')}}</p> <p><a class="btn btn-primary btn-md" href="{{prefix + x.nome}}" role="button">Quero esse</a></p> </div> </div> Eu gostaria de salvar o nome do aparelho que ele clicou.. 
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.