Ir para conteúdo

Arquivado

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

BrunoBit

AJAX - JS puro

Recommended Posts

Fala rapaziada, bom dia.
Eu to estudando JS ultimamente e praticando por aqui e me deparei com uma situação, o ajax ta respondendo depois que o script já executou e por consequência a minha variável IP (linha 92) está retornando indefinida, pq o ajax só responde depois, desconfio que seja algo relacionado à callback/async/sync.
Segue o código completo abaixo e pra fins de aprendizado, se quiserem me dar alguma orientação no que remover/otimizar/adicionar/encurtar no script em geral, ficarei bastante grato pela sua orientação.

obs1: Não desejo mexer com jquery por enquanto.
obs2: Os dados estão retornando corretamente no return da linha 85, que no caso é um IP.
obs3: Havia feito uma function pro ajax da linha 93 em diante e chamei dentro do ajax anterior na linha 85, funcionou perfeitamente e pegou o IP, porém achei meio esquisito e não sei se é uma boa prática colocar ajax dentro de ajax e retornei o código na forma como está logo abaixo.

 

erro: variável ( ip ) indefinida na linha 92

possível causa: ajax da linha 80-91 é executado só depois que o script já carregou por completo e me retorna indefinido na variável IP.

 

Desde já agradeço a ajuda rapaziada, abração, bom dia e fiquem com Deus.

 

segue o código específico:

function ajx(idx,dm){
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (this.readyState == 4 && this.status == 200) {
			rt = JSON.parse(this.responseText);
			return rt[idx]; // retorna o ip corretamente
		}
	}
	xhr.open("GET","https://"+ dm +"/data/getData.php",true);
	xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	xhr.send();
};
var ip = ajx("ip",h); // retorna indefinido

 

segue o código completo:

function pushRADS(){
	var p = window.location.href;
	var u = new URL(p);
	var s = u.searchParams.get("utm_source");
	var c = u.searchParams.get("utm_campaign");
	var m = u.searchParams.get("utm_medium");
	var t = u.searchParams.get("utm_term");
	var h = window.location.hostname;
	var ck = document.cookie;
	var dt = document.getElementById("rads");
	var ln = navigator.language;
	var pf = navigator.platform;
	var agt = navigator.userAgent;
	var ds = dt.dataset.device;
	var vs;
	var nf;
	var bw = "unknown";
	var v = "unknown";
    if ((vs = agt.indexOf('Opera')) != -1) {
        bw = 'Opera';
        v = agt.substring(vs + 6);
        if ((vs = agt.indexOf('Version')) != -1) {
            v = agt.substring(vs + 8);
        }
    } 
    if ((vs = agt.indexOf('OPR')) != -1) {
        bw = 'Opera';
        v = agt.substring(vs + 4);
    } else if ((vs = agt.indexOf('Edge')) != -1) {
        bw = 'Microsoft Edge';
        v = agt.substring(vs + 5);
    } else if ((vs = agt.indexOf('MSIE')) != -1) {
        bw = 'Microsoft Internet Explorer';
        v = agt.substring(vs + 5);
    } else if ((vs = agt.indexOf('Chrome')) != -1) {
        bw = 'Chrome';
        v = agt.substring(vs + 7);
    } else if ((vs = agt.indexOf('Safari')) != -1) {
        bw = 'Safari';
        v = agt.substring(vs + 7);
        if ((vs = agt.indexOf('Version')) != -1) {
            v = agt.substring(vs + 8);
        }
    } else if ((vs = agt.indexOf('Firefox')) != -1) {
        bw = 'Firefox';
        v = agt.substring(vs + 8);
    } else if (agt.indexOf('Trident/') != -1) {
        bw = 'Microsoft Internet Explorer';
        v = agt.substring(agt.indexOf('rv:') + 3);
    } else if ((nf = agt.lastIndexOf(' ') + 1) < (vs = agt.lastIndexOf('/'))) {
        bw = agt.substring(nf, vs);
        v = agt.substring(vs + 1);
        if (bw.toLowerCase() == bw.toUpperCase()) {
        	bw = navigator.appName;
        }
    }
    bwv = "browser: " + bw + " | version: " + v;
	if(screen.width <= 640){
		dv = "mobile";
		var mob = ["Android","webOS","iPhone","iPad","iPod","BlackBerry","Windows Phone"];
		for (var i = 0;i < mob.length;i++) {
			var re = new RegExp(mob[i], 'i');
			if(navigator.userAgent.match(re)){
				ua = mob[i] + " " + navigator.userAgent;
			}
		};
	} else {
		dv = "desktop";
		ua = navigator.userAgent;
	}
	if(ck == "" && s && c && m && t && (dv == ds || ds == "all")){
		var tm = dt.dataset.timeAd;
		setTimeout(function(){
			var ct = dt.dataset.cookieAd;
			var d = new Date();
			d = new Date(d.getTime() + 1000 * ct).toGMTString();
			document.cookie = "utm_source="+s+"; expires="+d+";";
			document.cookie = "utm_term="+t+"; expires="+d+";";
			document.cookie = "utm_medium="+m+"; expires="+d+";";
			function ajx(idx,dm){
				var xhr = new XMLHttpRequest();
				xhr.onreadystatechange = function() {
				    if (this.readyState == 4 && this.status == 200) {
				    	rt = JSON.parse(this.responseText);
				    	return rt[idx];
				    }
			    }
				xhr.open("GET","https://"+ dm +"/data/getData.php",true);
				xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
				xhr.send();
			};
			var ip = ajx("ip",h);
			var xhttp = new XMLHttpRequest();
			xhttp.open("POST","https://"+ h +"/ad/getDataAd.php",true);
			xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			xhttp.send("id_publisher="+t+"&id_campaign="+c+"&ad_source="+s+"&ad_type="+m+"&ip_client="+ip+"&device_source="+dv+"&device_type="+ua+"&device_lang="+ln+"&device_platform="+pf+"&browser="+bwv);
		},tm);
	}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

exatamente.

ajax por padrão é assíncrono. Por isso não faz sentido você tentar pegar retorno.

 

você tem que usar callback.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Willian, obrigado pela sua orientação. Eu andei estudando callback ontem, consegui compreender mais ou menos o conceito, apliquei algo semelhante ao callback, que no caso eu havia feito mais ou menos o seguinte:

var ip = ajx("ip",h);

function ajx(idx,dm){
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (this.readyState == 4 && this.status == 200) {
			rt = JSON.parse(this.responseText);
			ajaxfinal(rt[idx],t,c,s,m,dv,ua,ln,pf,bwv);
		}
	}
	xhr.open("GET","https://"+ dm +"/data/getData.php",true);
	xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	xhr.send();
};

function ajaxfinal(ip,t,c,s,m,dv,ua,ln,pf,bwv){
	var xhttp = new XMLHttpRequest();
	xhttp.open("POST","https://"+ h +"/ad/getDataAd.php",true);
	xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	xhttp.send("id_publisher="+t+"&id_campaign="+c+"&ad_source="+s+"&ad_type="+m+"&ip_client="+ip+"&device_source="+dv+"&device_type="+ua+"&device_lang="+ln+"&device_platform="+pf+"&browser="+bwv);
}
				

Perceba que agora eu possuo uma function ajaxfinal() e ela só é chamada quando a function ajx() é concluída, dessa forma eu consigo pegar o ip tranquilamente pq tudo é carregado conforme avança o código, porém, eu achei meio "estranho" e não sei se dessa forma que fiz é uma boa prática, pq eu teria que ficar colocando ajax dentro de ajax, dentro de ajax e dentro de outro ajax e assim vai. 

Tentei seguir um tutorial de callback, porém também não funcionou, o ajax só carregava depois, provavelmente havia feito errado.

Você possui algum exemplo nesse contexto ou alguma dica?

 

Desde já agradeço @William Bruno, tamo junto meu nobre.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Bruno, na verdade, a idéia é você receber o callback como argumento:

var ip = ajx("ip",h);

function ajx(idx,dm, callback){
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (this.readyState == 4 && this.status == 200) {
			rt = JSON.parse(this.responseText);
			callback(rt[idx],t,c,s,m,dv,ua,ln,pf,bwv);
		}
	}
	xhr.open("GET","https://"+ dm +"/data/getData.php",true);
	xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	xhr.send();
};

 

e ai na hora de usar:
 


ajx('12', '..', function(a) {
   console.log(a)
})

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@William Bruno perfeito o seu exemplo, consegui compreender, apliquei e funcionou liso.

Veja se está correto, principalmente com relação aos parâmetros passados:

function ajx(idx,dm,t,c,s,m,dv,ua,ln,pf,bwv,ta,glc,callback){
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (this.readyState == 4 && this.status == 200) {
			rt = JSON.parse(this.responseText);
			callback(rt[idx],t,c,s,m,dv,ua,ln,pf,bwv,ta,glc);
		}
	}
	xhr.open("GET","https://"+ dm +"/data/datasystem.php",true);
	xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	xhr.send();
};
ajx("ip",h,t,c,s,m,dv,ua,ln,pf,bwv,ta,glc, function(ip,t,c,s,m,dv,ua,ln,pf,bwv,ta,glc){
	var xhttp = new XMLHttpRequest();
	xhttp.open("POST","https://"+ h +"/ad/pagead.php",true);
	xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	xhttp.send("id_publisher="+t+"&id_campaign="+c+"&ad_source="+s+"&ad_type="+m+"&ip_client="+ip+"&device_source="+dv+"&device_type="+ua+"&device_lang="+ln+"&device_platform="+pf+"&browser="+bwv+"&target_action="+ta+"&geo_location_state="+glc);
});

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ment0r
      Boa noite pessoal, tudo bem?
       
      Estou desenvolvendo um sistema simples com exibição de formulário via modal. Uma vez cadastrado o serviço (tabela possui apenas dois campos, id e nome), eles são exibidos numa tabela com um ícone que permite a alteração do nome.

       
      Eu clico no ícone e é chamado um modal que é gerado via ajax (pois são vários registros).
       

       
      Nesse modal é mostrado o serviço e uma vez alterado, o botão Salvar chama uma função que atualiza a tabela servico, concluindo a tarefa. Fiz o mesmo processo pra cadastrar o serviço, com a diferença de que o modal está presente na mesma página, ou seja, não é chamado via ajax.
       
      Eis os códigos:
      <a href="#" onclick="modalUpdate(<?= trim($array['id']) ?>)"> <i class='bx bx-edit'></i> </a> // Trecho onde eu chamo a função modalUpdate. Função btAltServico click:
      $('#btAltServico').click(function() { var inpnome = $('#nome'); var inpid = $('#id'); if (inpnome.val() == '') { swal("Atenção", "Por favor, preencha os campos obrigatórios", "warning"); if (inpnome.val() == '') { inpnome.css("border","2px solid #f94545"); } else { inpnome.css("border",""); } alert(inpnome); alert(inpid); } else { $.ajax({ url: '../inc/ajax/altServico.php', type: 'post', dataType: 'json', // pode ser html data: { nome : inpnome.val(), id : inpid.val() }, success: function(resposta){ if (resposta == 1) { inpnome.val(""); inpnome.css("border",""); swal("Sucesso", "Serviço alterado", "success"); } else { if (resposta == 0) { swal("Erro", "Serviço não alterado. Log de erro gerado.", "error"); } else { swal("Atenção", "Serviço já cadastrado", "warning"); } } } }) } });  
      E modalUpdate.php :
       
      <?php /* * altServico.php * * Script responsável pelo update de serviços na tabela servico * * Função chamada pelo arquivo ajax.js */ //if ($_POST) { require'../conn.php'; require'../../class/class.geral.php'; $geral = new Geral(); $nome = $_POST['nome']; $id = $_POST['nome']; $ativo = 1; // Verifica se o servico já foi cadastrado $sqlVer = "select nome from algo68_db_cliente.servico where nome = '".$nome."' and id <> ".$id.""; $queryVer = mysqli_query($conn, $sqlVer); $resultVer = mysqli_num_rows($queryVer); if ($resultVer > 0) { echo json_encode(2); // servico já cadastrado } else { // Update do servico $sql = "update algo68_db_cliente.servico set nome = '".$nome."', ativo = ".$ativo." where id = ".$id; $query = mysqli_query($conn, $sql); $result = mysqli_affected_rows($conn); if ($result > 0) { echo json_encode(1); // alterou o servico } else { $geral->logErro(date('d/m/Y|H:i:s'), @$_SERVER[REQUEST_URI], 'AlterarServico', mysqli_error($conn)); echo json_encode(0); // não alterou o servico } } //} ?> O problema é que quando clico no botão Salvar, não acontece nada - se eu colocar um alert qualquer na função click, só pra saber se está chegando, também não da nada. E está da mesma forma que o cadastro de serviço, que funciona perfeitamente.

      Bom, é isso pessoal, tentei ser o mais breve e especifico possível. Qualquer ajuda é bem vinda, obrigado a todos, desde já.
    • Por Danilo - Jesus voltará!
      Olá pessoal, tenho uma div a qual através de um select categorias eu trago dados de empresas do banco, aí preciso clicar nas listagens das empresas e pegar o ID quando clica no checkbox e gravar pelo ajax novamente na session feita no arquivo php tipo um carrinho de compras, que essa parte já tenho... só não to conseguindo pegar os ids gerados dinamicamente no retorno feito do ajax, eles aparecem com F12 ao inspecionar, mas não aceita eu clicar para pegar o ID, acho que é algo de DOM, mas não to sabendo fazer... alguém aí saberia me ajudar como pegar esses ids ao clicar, já que eles vem dinamicamente?
       
      obrigado
    • Por joao b silva
      <input type="text" class="form-control" id="produto" name="produto"  onblur="BuscaPr()">
       
       
      Ola. eu chamo a função JS a seguir  no onblur do input acima. cikiqyeu is alerts para confirmar a chamada da função. ta chamando. mas alem dos alerts nao acontece mais nada. segue a função JS e o arquivo php que é chamado no ajax:
       
       
      FUNSAO JS
       
          function BuscaPr(){
              var buscaTexto = document.getElementById('produto').value
              alert(buscaTexto) 
              alert(buscaTexto.length) 
              $.ajax({
                  method: 'post',
                  url: 'sistema/produto/buscapr.php',
                  data: {busca: 'sim', texto: buscaTexto},
                  dataType: 'json',
                  success: function(retorno){
                          if(retorno.qtd == 0){
                              alert('q = 0')
                                  $('#resbuscapro').html('<p>Não encontramos resultados para sua busca</p>');
                          }else{
                              alert('q + 0')
                                  $('#resbuscapro').html(retorno.dados);
                          }
                  }
              });
          }

      O ARQUIVO PHP:
       
      <?php
      if (!session_id()):
          session_start();
      endif;
      require_once('_app/Config.inc.php');
      require_once('./Lib.php');
      if (isset($_POST['busca']) && $_POST['busca'] == 'sim'):
          $textoBusca = strip_tags($_POST['texto']);
          $retorno = array();
          $Par = "EM={$_SESSION['userlogin']['emCODIGO']}";
          $Fil = " where emCODIGO = :EM and prDESCRICAO like '%{$textoBusca}%' ";
          $Produto = new Read;
          $Produto->FullRead("select * from produto {$Fil}", $Par);
          if ($Produto->getResult()):
              $retorno['qtd'] = $Produto->getRowCount();
              foreach ($Produto->getResult() as $pro):
                  extract($pro);
                  $retorno['dados'] .= '<a href="#" id='.$prCODIGO.':'.$prVENDA.'">'. utf8_encode($prDESCRICAO).'</a>';
              endforeach;
          endif;
          echo json_encode($retorno);
      endif;
      ?>
    • Por Flaviaac
      Boa tarde pessoal,
       
      Sou iniciante em Desenvolvimento Web e não estou conseguindo resolver um problema no meu código, se alguém puder me ajudar agradeço imensamente.
       

      Vamos lá!
       
      Na tela de cadastro eu tenho um campo tipo select, onde escolho o tipo de documento, e no campo de baixo eu tenho um tipo text que mostrará a quantidade de anos para descarte deste documento. Então quando o usuário selecionar um dos documentos no campo de cima automaticamente deve aparecer o valor do tempo de descarte no campo de baixo, e ai sim o usuário poderá cadastrar o documento em si.
       
      Obs.: estou ignorando o restante dos campos de cadastro pois não são relevantes para este problema.
       

       
      Este evento está funcionando perfeitamente, o problema é que quando clico no botão "cadastrar" o campo de "periodicidade de descarte" não está salvando no bando de dados com o valor exibido, mas sim como zero.
       
      No arquivo processa_cadastro.php quando dou um var_dump em $periodo_doc ele imprime: int(0)
       
       
      Não consegui identificar onde estou errando.
       
      Por favor, poderiam me dar uma luz.
      Obrigada!
       
       
       
      Segue os códigos para entendimento.
       
       
      tipo_arquivo.sql:
      -- phpMyAdmin SQL Dump -- version 5.2.0 -- https://www.phpmyadmin.net/ -- -- Host: localhost -- Tempo de geração: 12-Jul-2022 às 14:46 -- Versão do servidor: 10.4.24-MariaDB -- versão do PHP: 7.4.29 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Banco de dados: `sistemadescarte` -- -- -------------------------------------------------------- -- -- Estrutura da tabela `tipo_arquivo` -- CREATE TABLE `tipo_arquivo` ( `id_tipo` int(11) NOT NULL, `nome_tipo` varchar(255) NOT NULL, `descarte` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Extraindo dados da tabela `tipo_arquivo` -- INSERT INTO `tipo_arquivo` (`id_tipo`, `nome_tipo`, `descarte`) VALUES (1, 'Ata Extraordinária', 5), (2, 'Ata Ordinária', 5), (3, 'carta', 8), (4, 'Memorando', 10), (5, 'Memorando Circular', 8), (6, 'Ofício', 5), (7, 'Ofício Circular', 5), (8, 'Processo', 10); -- -- Índices para tabelas despejadas -- -- -- Índices para tabela `tipo_arquivo` -- ALTER TABLE `tipo_arquivo` ADD PRIMARY KEY (`id_tipo`), ADD KEY `id_tipo` (`id_tipo`); -- -- AUTO_INCREMENT de tabelas despejadas -- -- -- AUTO_INCREMENT de tabela `tipo_arquivo` -- ALTER TABLE `tipo_arquivo` MODIFY `id_tipo` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;  
      documento.sql:
      -- phpMyAdmin SQL Dump -- version 5.2.0 -- https://www.phpmyadmin.net/ -- -- Host: localhost -- Tempo de geração: 12-Jul-2022 às 14:47 -- Versão do servidor: 10.4.24-MariaDB -- versão do PHP: 7.4.29 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Banco de dados: `sistemadescarte` -- -- -------------------------------------------------------- -- -- Estrutura da tabela `documento` -- CREATE TABLE `documento` ( `ID_DOC` int(11) NOT NULL, `NUMERO_DOC` varchar(20) NOT NULL, `TIPO_DOC` int(11) NOT NULL, `INTERESSADO` varchar(255) NOT NULL, `TITULO` varchar(400) NOT NULL, `OBS` varchar(400) DEFAULT NULL, `PERIODICIDADE` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Extraindo dados da tabela `documento` -- INSERT INTO `documento` (`ID_DOC`, `NUMERO_DOC`, `TIPO_DOC`, `INTERESSADO`, `TITULO`, `OBS`, `PERIODICIDADE`) VALUES (2, '788741-2019/65', 1, 'admin', 'Ata extraordinária de 2018', 0), (3, '888888-2021/21', 3, 'gerencia', 'Carta a gerencia', 0), (4, '333653-2022/1', 8, 'teste', 'Processo', 'teste na observação', 0), (6, '224568-2022/3', 2, 'teste', 'Ata Ordinária', 0); -- -- Índices para tabelas despejadas -- -- -- Índices para tabela `documento` -- ALTER TABLE `documento` ADD PRIMARY KEY (`ID_DOC`), ADD KEY `TIPO_DOC` (`TIPO_DOC`); -- -- AUTO_INCREMENT de tabelas despejadas -- -- -- AUTO_INCREMENT de tabela `documento` -- ALTER TABLE `documento` MODIFY `ID_DOC` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2295; -- -- Restrições para despejos de tabelas -- -- -- Limitadores para a tabela `documento` -- ALTER TABLE `documento` ADD CONSTRAINT `documento_ibfk_1` FOREIGN KEY (`TIPO_DOC`) REFERENCES `tipo_arquivo` (`id_tipo`); COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;  
       
      cadastro.php:
      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="js/descarte.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <title>Cadastro de Documento</title> </head> <form action="" method="post"> <div class="form-row"> <!-- tipo de documento --> <div class="form-group col-md-1"> <label>Tipo de Documento</label> <select name="tipo" id="tipo" class="form-control" onchange="funcaoDescarte()"> <option selected>Selecione...</option> <!--------------- P H P ----------------> <?php while($row = $result->fetch_assoc()) { echo "<option value=".$row['id_tipo'].">".$row['nome_tipo']."</option>"; } ?> <!--------------- F I M P H P ---------> </select> </div> </div> <div class="form-row"> <!-- tempo para descarte --> <div class="form-group col-md-2"> <span class="form-text">Periodicidade para descarte deste documento:</span> <input name="descarte" type="text" class="form-control" id="descarte" value="" disabled=""> <input type="text" readonly class="form-control-plaintext" value="Anos"> </div> </div> <!------------------- botão cadastrar e limpar ----------------------------------------------> &nbsp; </br> <div class="form-row"> <!-- Cadastrar e Limpar --> <div class="form-group col-md-4"> <button type="submit" name="cadastrar_doc" class="btn btn-primary">Cadastrar</button> <button type="reset" name="limpar_doc" class="btn btn-primary">Limpar campos</button> </div> </div> </form  
      descarte.js:
      function funcaoDescarte(){ var x = document.getElementById("tipo").value; y = $.ajax({ url:"periodicidade.php", method:"POST", data:{ id : x }, success:function(data){ $("#descarte").val(data); } }) }  
      periodicidade.php:
      <?php include_once "conexao.php"; $k = $_POST['id']; $k = trim($k); $sql = "SELECT * FROM tipo_doc WHERE id_tipo ='{$k}'"; $result = $conn->query($sql); while($row = $result->fetch_assoc()){ echo $row['descarte']; } ?>  
      processa_cadastro.php:
      <?php $tipo_doc = intval(filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_NUMBER_INT)); $periodo_doc = intval(filter_input(INPUT_POST, 'descarte', FILTER_SANITIZE_NUMBER_INT)); if(isset($_POST['cadastrar_doc'])) { if($tipo_doc !='' || $periodo_doc !='') { $stmt = $conn->prepare("INSERT INTO documento (tipo_doc, periodicidade) VALUES (?, ?)"); $stmt->bind_param("ii", $tipo_doc, $periodo_doc); $stmt->execute(); echo "<span class='alert alert-success'> Cadastrado com sucesso</span>"; $erro = mysqli_error($conn); echo "Ocorreu o seguinte erro: ", '"', $erro, '"<br>'; }else{ echo "<span class='alert alert-danger'> Não cadastrado</span>"; $erro = mysqli_error($conn); echo "Ocorreu o seguinte erro: ", '"', $erro, '"<br>'; } } $stmt->close(); $conn->close(); ?>  
       
    • Por eduardodsilvaq
      Erro retornado no console do navegador: 400 bad request
      Rastreei o erro ate essa parte no arquivo admin-ajax.php mudando o valor de resposta de 0 para 1:
      if ( is_user_logged_in() ) { // If no action is registered, return a Bad Request response. if ( ! has_action( "wp_ajax_{$action}" ) ) { wp_die( '0', 400 ); } Tentei de tudo, mas infelizmente nao entendi oq realmente significa esse login e como ele funciona.
      Vi algumas pessoas tendo problema com o host, no meu caso estou usando hostinger. (Nao creio que isso e relevante mas ta ai.)
       
      Código utilizado:
       
      Javascript
      function formValidation() { event.preventDefault(); var name = document.forms["contactForm"]["name"].value; var email = document.forms["contactForm"]["email"].value; var subject = document.forms["contactForm"]["subject"].value; var message = document.forms["contactForm"]["message"].value; document.getElementById('status').innerHTML = ''; var errorMessage="<span class='error'>All fields are required.</span>"; var regEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; if (name.trim() == "" ||email.trim() == "" || subject.trim() == "" || message.trim() == "") { document.getElementById('status').innerHTML = errorMessage; return false; } if (!regEx.test(email)) { var errorMessage="<span class='error'>Invalid email.</span>"; document.getElementById('status').innerHTML = errorMessage; return false; } processContactSubmit(); return true; } function processContactSubmit() { var request = new XMLHttpRequest(); request.open("POST", "/wp-admin/admin-ajax.php?action=process_contact_form"); request.onreadystatechange = function() { if(this.readyState === 4 && this.status === 200) { document.getElementById("status").innerHTML = this.responseText; } }; var myForm = document.getElementById("contactForm"); var formData = new FormData(contactForm); request.send(formData); } functions.php
      add_action('wp_ajax_nopriv_process_contact_form', 'process_contact_form'); add_action('wp_ajax_process_contact_form', 'process_contact_form'); //Retirar essa parte para error no console, no contrario ira aparecer no navegador o numero 0. function process_contact_form() { $to = "Recipient Email Address"; $subject = $_POST["subject"]; $headers = "Testing"; $message = $_POST["message"]; $attachments = ""; $sent = wp_mail($to, $subject, $message, $headers, $attachments); if (! $sent) { echo "<span class='error'>Problem in sending mail.</span>"; } else { echo "<span class='success'>Hi, thank you for the message.</span>"; } wp_die(); } Html
      <form name="contactForm" id="contactForm" method="post" onsubmit="return formValidation()" action=""> <p class="comment-form-comment"><textarea id="message" name="message" required="" placeholder="" aria-required="true"></textarea></p> <p class="comment-form-author"><label for="author">Nome: </label> <input id="name" name="name" required="" size="30" type="text" value=" " /></p> <p class="comment-form-author about"><label for="author">Assunto: </label> <input id="subject" name="subject" required="" size="40" type="text" value=" " /></p> <p class="comment-form-email"><label for="email">Email: </label> <input id="email" name="email" required="" size="30" type="text" value="" /></p> <p class="form-submit"><input id="submit" class="submit" name="email_contato" type="submit" value="Enviar" /></p> </form>&nbsp; <h3><div id="status"></div></h3>  
×

Informação importante

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