Jump to content
FabianoSouza

Timeout em AJAX

Recommended Posts

Preciso adicionar uma função de timeout na minha requisição AJAX e peço ajuda aos colegas.

Já tenho um AJAX que funciona normalmente. Preciso de ajuda para saber como implementar um timeout no código que já tenho.

 

Vejam o código. É um script genérico, para ser reutilizado pelas diversas functions do sistema, que precisam trazer dados.

  const server = {
		  req : null,
		  res : null,
		  ajax : function(strReq, functionResposta)
		  {
			this.req = strReq
			this.url = this.req.url
			this.req = JSON.stringify(this.req);
			this.status = 0;
			try 
			  {
				if (window.XMLHttpRequest) 
				  {
					$obj = new XMLHttpRequest();
				  }
				else
				  {
					$obj = new ActiveXObject('Microsoft.XMLHTTP');
				  }
				$obj.onreadystatechange = function()
				{
				  if ($obj.readyState == 4 && $obj.status >= 200 && $obj.status <= 299)
					{ 			
					  server.res = JSON.parse($obj.responseText);
					  functionResposta();
					}
				  }
				  $obj.open('post', this.url, true);
				  $obj.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
				  $obj.send(encodeURI('str='+server.req)); 
			  }
			  catch(e)
			  {
				this.req = null;
				this.res = null;
			  }
		  }
  };

 

 

Para chamar essa function, passando parâmetros, faço assim:

 

//crio uma string com parâmetros...
var obj={id:'XPTO', url:'/app/backend/'};

//invoco a function AJAX escrita acima
server.ajax(obj, function(){});}

 

Essa estrutura funciona normalmente. Só preciso mesmo saber como implementar um "timer" para responder assim que receber a resposta do servidor.

Share this post


Link to post
Share on other sites

Dentro dessa condicional pois a operação aqui deve ser concluída "readyState == 4" e a requisição deve ter tido sucesso "status >= 200".....

Em 06/04/2021 at 15:14, FabianoSouza disse:

if ($obj.readyState == 4 && $obj.status >= 200 && $obj.status <= 299)

 

E isso "$obj.status <= 299" nem deveria está dentro da condicional

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mateus.andriollo
      Qual seria a forma correta de projetar uma aplicação multi formulários. Estou fazendo ela em Jquery com Load() mas algumas ações não são executadas em script.
      Me pergunto seria o correto?
       
      Exemplo: pensando um cadastro de clientes/empresas
      - clientes.php (formulário de cadastro/edição/anexos)
      - empresas.php (formulários de cadastro de empresa/ funcionários/ setores)
      - relatorios.php (clientes e empresas)
       
      Cada página dessa eu chamo, ela vem sempre com o seu conteúdo...
      Pensei no seguinte, todos estea formulários carregados e eu apenas usar função Get() para preencher campos e gerar os relatórios.
       
      Fica a dúvida, pois hj essas páginas extras são HTML com form e ações PHP
       
       
       
       
       
    • By marcossantana10
      Amigos, estou com o seguinte problema: quando monto meu formulário dinamicamente, ao clicar no botão submit é dado um refresh na página, ao invés de realizar o submit. Esse formulário busca todos os registros de uma dada categoria no banco de dados e os monta na página para que possam ser editados individualmente.
      Segue o código:
      //montando os formulários:
          $.each(responseJson, function(key, value){                                 var itens = "<div class='card_nbl'><div class='container_nbl'><div class='text_card_nbl update_info_consulta'><form name='updateProntuario' method='post'><label style='text-align: left;' for='prontuario'>Consulta:</label><textarea name='prontuario' class='input_full' style='resize: none; height: 100px; padding-top: 10px; margin-top: 5px;' id='prontuario'>"+value.descricao+"</textarea><label style='text-align: left;' for='info_sigilosa'>Informações sigilosas:</label><br><textarea name='info_sigilosa' class='input_full' style='resize: none; height: 100px; padding-top: 10px; margin-top: 5px;' id='info_sigilosa'>"+value.info_sigilosa+"</textarea><input type='submit' name='salvar' value='Salvar' class='btn btn_padrao'></form></div></div></div>"                                 $("#item1mobile").append(itens)                             })  
      Minha função de submit:
          $(function(){                 $('form[name=updateProntuario]').submit(function(){                     $.ajax({                         type: 'POST',                         url: 'www',                         dataType: 'json',                         data: $(this).serialize(),                         success: function(data){                             $("#loading").attr("class", "loading")                             swal_sucesso("Tudo certo!", "As informações sobre a consulta foram atualizadas.")                         }                     });                 return false;                 })             }) OBS: quando eu faço o formulário direto no HTML (sem montar vários itens com um laço, como acima), o submit funciona normalmente.
       
    • By mzaidan
      Boa tarde, estou fazendo a conexão da seguinte maneira:
      $servername = "localhost"; $database = "banco"; $username = "user"; $password = "senha"; // Create connection $conn = mysqli_connect($servername, $username, $password, $database); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } //echo "Connected successfully"; mysqli_close($conn);  No campo pesquisar:
      require_once('class/Conexao.class.php'); try { $pdo = new Conexao(); $resultado = $pdo->select("SELECT * FROM phrasal WHERE ingles LIKE '$parametro%' or portugues like '$parametro%' ORDER BY id LIMIT 4"); $pdo->desconectar(); }catch (PDOException $e){ echo $e->getMessage(); } //resgata os dados na tabela if(count($resultado)){ foreach ($resultado as $res) { $msg .=" <tr>"; $msg .=" <td><font color='#87CEFA' size=$size><b>".$res['ingles']."</b></font></td>"; $msg .=" <td><div class='a'><font size=$size>".$res['portugues']."</font></div></td>"; $msg .=" <td><div class='a' align='justify'><font size=$size>".$res['exemplo']."</font></div></td>"; $msg .=" </tr>"; } }else{ $msg = ""; $msg .="Nenhum resultado foi encontrado..."; } $msg .=" </tbody>"; $msg .="</table>"; //retorna a msg concatenada echo $msg; Mas não retorna nada.
      Onde estou errando?

      Site: http://ehoradoingles.com/

      Desde já agradeço.
    • By Jack Oliveira
      Boa noite pessoal
       
       
      Quero fazer uma verificação em tempo real no banco de dados antes de clicar para cadastra, ver se o nome que esta no input name="nome_empresa_link"   ver se ele já existe no banco de dados. no caso so permitir preencher outro campos se o input que esta sendo verificado estiver correto ou seja tudo ok...
       
      Lembrando este input ele é preenchido conforme é digitado no input name="nome_empresa"  Não sei se isso interfere ao fazer a verificação
       
      HTML
             <div class="col-md-6">         <div class="form-group">          <label for="nome_empresa">Nome</label>          <input type="text" autocomplete="off" id="nome_empresa" maxlength="100"  name="nome_empresa" class="form-control input_nome_empresa" required placeholder="Nome da Loja">        </div>      </div>      <div class="col-md-6">       <div class="form-group">        <label for="nome_empresa_link">Url Amigavél</label> <em id="resposta"></em>        <input type="text" autocomplete="off"  id="nome_empresa_link" name="nome_empresa_link" maxlength="100" class="form-control input_nome_empresa_link" required placeholder="/ Use maiúsculas, minúsculas e underline.">        <?= $site; ?><span><em style="color: green;" id="nome_empresa_link"></em>/</span>      </div>    </div> No PHP fazer verificação fiz isso...
      <?php if(isset($_POST['nome_empresa_link'])) { $nome_empresa_link=$_POST['nome_empresa_link']; $checkdata = DBCount('ws_empresa','nome_empresa_link',"WHERE nome_empresa_link = '{$nome_empresa_link}'"); if ($checkdata >= 0) { //echo "Um nome igual este já esta sendo usado no sistema"; swal('Atenção!!!', 'A URL AMIGAVÉL não disponivél para cadastro \n tente com outro nome!', 'warning', 'Fechar'); } /*else { echo "<font color='green'>Disponivél...</font>"; } */ exit(); } ?> No ajax fiz assim
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script language="javascript"> var nome_empresa_link = $("#nome_empresa_link"); nome_empresa_link.blur(function() { $.ajax({ url: 'notificacao/checkdata.php', type: 'POST', data:{"nome_empresa_link" : nome_empresa_link.val()}, success: function(data) { console.log(data); data = $.parseJSON(data); $("#resposta").text(data.nome_empresa_link); } }); }); </script> Só que não retorna nada
       
       
    • By Jack Oliveira
      Ola pessoa se a minha duvida estiver no topic errado pessoa desculpas
       
      Mais é o seguinte fiz uns arquivos formato json funciona perfeitamente 
      porem alguns deles tem opção de abrir modal para cadastro e edição
       
      mais eles não esta abrindo DataTable
       
      Se eu fazer sem usar datatable direto no arquivo ele abre
       
      o script esta da seguinte forma
      <script type="text/javascript"> $(function () { $("#DataTableAjax").DataTable({ "pageLength": 25, "processing": true, "serverSide": true, "ajax": "ajax/<?php echo $UrlPage; ?>", "aLengthMenu": [ [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 100, -1], [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 100, "Todos"] ], "paging": true, "lengthChange": true, "searching": true, "ordering": true, "info": true, "autoWidth": true, "columnDefs": [{ "targets": 'no-sort', "orderable": false, }], "language": { "sEmptyTable": "Nenhum registro encontrado", "sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registros", "sInfoEmpty": "Mostrando 0 até 0 de 0 registros", "sInfoFiltered": "(Filtrados de _MAX_ registros)", "sInfoPostFix": "", "sInfoThousands": ".", "sLengthMenu": "Mostrar _MENU_ resultados por página", "sLoadingRecords": "Carregando...", "sProcessing": "Processando...", "sZeroRecords": "Nenhum registro encontrado", "sSearch": "Pesquisar", "oPaginate": { "sNext": "Próximo", "sPrevious": "Anterior", "sFirst": "Primeiro", "sLast": "Último" }, "oAria": { "sSortAscending": ": Ordenar colunas de forma ascendente", "sSortDescending": ": Ordenar colunas de forma descendente" } } }); }); </script> Bom acho que o arquivo a seguir não tem nada a ver, mais irei colocar mesmo assim. Na parte onde se o arquivo ajax/lojas.php que seria em formato json
      esta assim
       
      <?php return ob_get_clean(); } ), array( 'db' => 'id_empresa', 'dt' => 10, 'formatter' => function ($id_empresa, $row) { ob_start(); $ImprimirPermissao = GetPermissaoAcesso(); ?> <?php if (checkPermissao($ImprimirPermissao, 'lojas', 'produto', 'renovar')) { ?> <a class="btn btn-primary" href="#" data-toggle="modal" data-target="#modalRenovar_<?= $row['id_empresa'];?>"><i title="Nova data de renovação" class="fa fa-calendar" aria-hidden="true"></i></a> <?php } ?>  
      Modal assim
       
      <?php $Query = DBRead('lojas','*'); if (is_array($Query)) { foreach ($Query as $dados) { ?> <div class="modal fade" id="modalRenovar_<?= $id_empresa;?>" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <h4 class="modal-title" id="myModalLabel"><b>LOJA: </b><?= $nome_empresa;?></h4> </div> <div class="modal-body"> <form method="post" action="?AtualizarEmpresa=<?= $id_empresa; ?>" enctype="multipart/form-data"> <div class="form-group"> <label>Nova data:</label> <input class="form-control" type="date" name="empresa_data_renovacao" required placeholder="00/00/0000"> </div> </div> <div class="modal-footer"> <input type="hidden" name="user_id" value="<?=$user_id;?>"> <center><hr> <button class="btn btn-primary">Atualizar</button> <br><br> </center> </form> </div> <div class="modal-footer"> </div> </div> </div> </div> <?php }} ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.