Ir para conteúdo

POWERED BY:

Arquivado

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

Filhote de Dev

Atribuindo valores do http.response para variáveis Json

Recommended Posts

Estou fazendo um requisição HTTP e de retorno recebo um Json! Então eu quero pegar esse valor de Json e atribuir a outra variável para poder modificá-la e depois exibir as duas lado a lado para comparar. Então me deparei com 2 problemas o primeiro é que não estou conseguindo atribuir o valor httpRequest.responseText a uma variável, já tentei a função eval() e a toString() e quando eu peço para printar com um alert() para verificar me retorna undefined o segundo problema é que eu estava exibindo o resultado na dom por meio de appendChild(), estou exibindo apenas com os valores originais para teste, mas quando ele executa esse trexo do code, ele printa na dom e logo em seguida retira da dom, tipo uma piscadinha rápida. Ficaria grato se me ajudassem a resolver esse problema.

 

o Json que ele recebe de uma pagina .html é esse:

{"numero_casas":9,"token":"68c56aa784fe216ae92720b76386ea0995055074","cifrado":"fqnw rw mxdkc, unjen rc xdc. sxbqdj kuxlq","decifrado":"","resumo_criptografico":""}

 

o Script esta assim:

var httpRequest
function request(){
	var url = 'test.html'//apagar depois

	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		httpRequest = new XMLHttpRequest()
	} else if (window.ActiveXObject) { // IE
		try {
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP")
		}
		catch (e) {
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP")
			}
			catch (e) {}
		}
	}

	if (!httpRequest) {
		alert('Giving up :( Cannot create an XMLHTTP instance')
		return false
	}
	httpRequest.onreadystatechange = alertContents
	httpRequest.open('GET', url, true)
	httpRequest.responseType = 'jason'
	httpRequest.send()
	httpRequest.onload = function(){
		view(httpRequest)
	}	
}

function alertContents() {
	if (httpRequest.readyState === 4) {
		if (httpRequest.status === 200) {
			alert(httpRequest.responseText)
		} else {
			alert('There was a problem with the request.')
		}
	}
}


function view(httpRequest){
	var resposta = httpRequest.responseText.toString()
	alert(resposta.value)
	var box = document.querySelector('div#decoding')
	box.setAttribute('class', 'shadow')

	var challenge = document.createElement('fieldset')
	challenge.setAttribute('class', 'painting')
	var legendChallenge = document.createElement('legend')
	legendChallenge.innerHTML = 'Challenge'
	challenge.innerHTML = `Número de casas: ${httpRequest.response.numero_casa}<br>
	Token: ${httpRequest.response.token}<br>
	Cifrado: ${httpRequest.response.cifrado}<br>
	Decifrado: ${httpRequest.response.decifrado}<br>
	Resumo Criptografico: ${httpRequest.response.resumo_criptografico}`

	var answer = document.createElement('fieldset')
	answer.setAttribute('class', 'painting')
	var legendAnswer = document.createElement('legend')
	legendAnswer.innerHTML = 'Answer'
	answer.innerHTML = `Número de casas: ${httpRequest.response.numero_casas}<br>
	Token: ${httpRequest.response.token}<br>
	Cifrado: ${httpRequest.response.cifrado}<br>
	Decifrado: ${httpRequest.response.decifrado}<br>
	Resumo Criptografico: ${httpRequest.response.resumo_criptografico}`

	box.appendChild(challenge)
	box.appendChild(answer)
	challenge.appendChild(legendChallenge)
	answer.appendChild(legendAnswer)
}

 

 

Index.html:

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<link rel="stylesheet" href="style.css">
		<title>Caesar cipher</title>
	</head>
	<body>
		<header>
			<h1>Caesar cipher</h1>
		</header>
		<section>
			<div class="container">
				<div class="box">
					<div class="form">
						<form action="">
							<div>
								<fieldset class="shadow">
									<legend><h1>Decoding</h1></legend>
									<button id="btntoken" onclick="request()">Fetch Encryption Challenge</button>
								</fieldset>
							</div>
							<div id="decoding" class="aling"></div>
						</form>
					</div>
				</div>
			</div>
		</section>
		<footer>

		</footer>
		<script type="text/javascript" src="script.js"></script>
	</body>
</html>

 

 

e o style.css para dar sentido as class:

/*zerando margein e padding de todos os elementos*/
*{
	margin: 0;	
	padding: 0;
}
/*definido estilo padrão*/
body{
	font-family: 'Courier New', Courier, monospace;
	font-size: 16px;
	background-color: #F5F6FA;
}
/*Estilização e alinhamento do cabeçario*/
header{
	background-color: #22212F;
	color: #FFF;
	height: 80px;
	font-size: 24px;
	align-items: center;
	display: flex;
	padding-left: 15px;
}
/*Alinhamento das tags presentes na section*/
	section,div.form{
	display: flex;
	justify-content: center;
}
div.container{
	margin:5px;
	width: 800px;
	background-color: #FFF;
	padding: 15px;
	margin-top: 20px;
}
div.parag,div.box{
	display: block;
}
div.form{
	margin-top:30px;
}
p{
	margin-top: 10px;
}
/*estilização do formulario principal*/
.shadow{
	box-shadow: 5px 5px 5px 2px #22212F;
}
fieldset{
	width: 500px;
	min-height:150px;
	padding: 10px;
}
legend{
	font-size: 20px;
}
input#token{
	font-size: 16px;
	width: 350px;
	height: 30px;
}
button#btntoken{
	margin: 5px;
	margin-top:15px;
	width:480px;
	height: 50px;
	font-size: 24px;
}

/*estilização da resposta ao usuário*/
.aling{
	margin: 20px;
}
.painting{
	display: inline-block;
	width: 230px;
	min-height: 100px;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Filhote de Dev 

 

Bom amigo isso que eu vou falar e chato porem, é necessário. Seu código está muito bagunçado, ele está meio confuso.

 

Tem um problema no elemento form. Quando você não definir um tipo para o botão que está dentro de um elemento form, ele por padrão vai ser do tipo submit e quando o usuário clicar nele, ele vai disparar o evento submit do form, assim o form vai fazer uma request para a mesma página recarregando a página e perdendo a chama do método request().

 

Para resolver isso basta definir um tipo para o botão e bloquear o evento de submit do form.

<form onsubmit="return false">
<button type="button" id="btntoken" onclick="request()">Fetch Encryption Challenge</button>

 

O form vai ficar assim:

<form onsubmit="return false">
	<div>
		<fieldset class="shadow">
			<legend><h1>Decoding</h1></legend>
			<button type="button" id="btntoken" onclick="request()">Fetch Encryption Challenge</button>
		</fieldset>
	</div>
	<br>
	<div id="decoding" class="aling"></div>
	</form>

 

Bom tem algumas coisa estranhar que eu nunca vi ser utilizada, como o evento de onload no object XmlHttpRequest; e o responseType  com o nome de 'jason'. Também não consegui entender qual a utilidade do método  alertContents().

 

Vou deixar aqui um tutorial de Introdução ao AJAX

 

Vou deixa também um código de exemplo:

function request()
            {
                let 
                    xmlhttp,
                    url = "server.php"; // remover

                if (window.XMLHttpRequest)
                {
                    // code for modern browsers
                    xmlhttp = new XMLHttpRequest();
                }
                else
                {
                    // code for old IE browsers
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }

                if (!xmlhttp)
                {
                    alert('Giving up :( Cannot create an XMLHTTP instance')
                    return false
                }

                xmlhttp.onreadystatechange = function()
                {
                    if (this.readyState == 4 && this.status == 200)
                    {
                        let jsonRequest;

                        try {
                            jsonRequest = JSON.parse(this.responseText); // Convertendo o texto em um JSON
                            view(jsonRequest);
                            return;
                        }
                        catch(e)
                        {
                            alert("A resposta do servidor não pode ser convertida em um JSON");
                        }
                    }
                }

                xmlhttp.open("GET", url, true);
                xmlhttp.send();

            }

            function view(jsonRequest)
            {
                if (typeof jsonRequest != "object")
                {
                    return false;
                }

                let 
                    box = document.querySelector('div#decoding'),
                    challenge = document.createElement('fieldset'),
                    legendChallenge = document.createElement('legend'),
                    answer = document.createElement('fieldset'),
                    legendAnswer = document.createElement('legend');

                box.setAttribute('class', 'shadow');
                challenge.setAttribute('class', 'painting');
                answer.setAttribute('class', 'painting');

                legendChallenge.innerHTML = 'Challenge';
                challenge.innerHTML = `
                    Número de casas: ${jsonRequest.numero_casas}<br>
                    Token: ${jsonRequest.token}<br>
                    Cifrado: ${jsonRequest.cifrado}<br>
                    Decifrado: ${jsonRequest.decifrado}<br>
                    Resumo Criptografico: ${jsonRequest.resumo_criptografico}
                `;
                legendAnswer.innerHTML = 'Answer';
                answer.innerHTML = `
                    Número de casas: ${jsonRequest.numero_casas}<br>
                    Token: ${jsonRequest.token}<br>
                    Cifrado: ${jsonRequest.cifrado}<br>
                    Decifrado: ${jsonRequest.decifrado}<br>
                    Resumo Criptografico: ${jsonRequest.resumo_criptografico}
                `;

                box.appendChild(challenge);
                box.appendChild(answer);
                challenge.appendChild(legendChallenge);
                answer.appendChild(legendAnswer);
            }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Gabrielms! Sua resposta foi recebida com carinho.

 

A questão do button eu realmente desconhecia que ele recebesse esse atributo como default e isso solucionou o problema da piscadela.

 

 método  alertContents() ele está ae apenas para me orientar se o que estou recebendo, se estou recebendo  é o que eu realmente quero receber. Essa linha será comentada no final!

 

Mas você ajudou bastante resta agora só eu conseguir fazer a atribuição do json para outra variável.

 

Agora na questão da codificação confusa teria alguma dica de como eu resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida, referente cálculo de valores em tempo real.

      Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado.

      Quero mostrar o RESULTADO assim: 0,00  ou  0.00

      Abaixo posto o código.
      jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando })  
       
      Grato,
       
      Cesar
       
       
    • Por violin101
      Caro amigos, saudações.

      Tenho uma tabela escrita em JS que funciona corretamente.
       
      Minha dúvida:
      - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ?

      Abaixo posto o script:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar  
      Grato,

      Cesar
       
    • Por violin101
      Caros amigos, saudações.

      Estou com uma pequena dúvida se é possível ser realizado.

      Preciso passar 2 IDs para o Sistema executar a função, estou utilizando desta forma e gostaria de saber como faço via JS para passar os parâmetro que preciso.

      Observação:
      Dentro da TABELA utilizei 2 Forms, para passar os IDS que preciso, funcionou conforme código abaixo.
      <div class="card-body"> <table id="tab_clie" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center; width:10%;">Pedido Nº</th> <th style="text-align:center; width:10%;">Data Pedido</th> <th style="text-align:center; width:32%;">Fornecedor</th> <th style="text-align:center; width:10%;">Status</th> <th style="text-align:center; width:5%;">Ação</th> </tr> </thead> <tbody> <?php foreach ($results as $r) { $dta_ped = date(('d/m/Y'), strtotime($r->dataPedido)); switch ($r->pd_status) { case '1': $status = '&nbsp;&nbsp;Aberto&nbsp;&nbsp;'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#000000'; //Cor: Preta break; case '2': $status = 'Atendido Total'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#086108'; //Cor: Verde break; case '3': $status = 'Atendido Parcial'; $txt = '#000000'; //Cor: Branco $cor = '#FEA118'; //Cor: Amarelo break; default: $status = 'Cancelado'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#D20101'; //Cor: Vermelho break; } echo '<tr>'; echo '<td width="10%" height="10" style="text-align:center;">'.$r->pd_numero.'</td>'; echo '<td width="10%" height="10" style="text-align:center;">'.$dta_ped.'</td>'; echo '<td width="32%" height="10" style="text-align:left;">'.$r->nome.'</td>'; echo '<td width="10%" height="10" style="text-align:left;"><span class="badge" style="color:'.$txt.'; background-color:'.$cor.'; border-color:'.$cor.'">'.$status.'</span></td>'; echo '<td width="5%" style="text-align:center;">'; ?> <div class="row"> <?php if($this->permission->checkPermission($this->session->userdata('permissao'), 'vPedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/visualizar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-warning" title="Visualizar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-search icon-white"></i></button> </form> <?php } if($this->permission->checkPermission($this->session->userdata('permissao'), 'ePedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/editar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-primary" title="Editar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-edit icon-white"></i></button> </form> <?php } ?> </div> <?php echo '</td>'; echo '</tr>'; } ?> </tbody> </table> </div>
      Grato,

      Cesar.
    • Por belann
      Olá!
       
      Estou usando o editor quill em uma página html, sem fazer a instalação com npm, mas usando as api´s via internet com http, no entanto não consigo fazer a tecla enter funcionar para mudança de linha, tentei essa configuração abaixo, mas não funcionou.
       
      modules: {       syntax: true,       toolbar: '#toolbar-container',       keyboard: {         bindings: {           enter: {             key: 13,             handler: function(range, context) {                       quill.formatLine(range.index, range.length, { 'align': '' });             }           }  
       
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de poder tirar uma dúvida com os amigos.
       
      Como faço uma função para Comparar a Data Digitada pelo o Usuário com a Data Atual ?

      Data Digitada:  01/09/2024
       
      Exemplo:
      25/09/2024 é menor que DATA Atual  ====> mensagem: informe uma data válida.
      25/09/2024 é igual DATA Atual ===> o sistema libera os INPUT's.
       
      Como faço uma comparação com a Data Atual, para não Deixar Gravar Data retroativa a data Atual.
       
      Grato,
       
      Cesar
×

Informação importante

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