Jump to content
FabianoSouza

AJAX - Enviar form e string

Recommended Posts

Quero saber se é possível enviar formData e string na mesma requisição AJAX.

 

$frmData = new FormData($form);
$xhr.open('post', $form.getAttribute('action'), true);
$xhr.setRequestHeader('content-type', 'text/plain;charset=utf-8');

$xhr.send($frmData); //******* quero saber se consigo enviar sting, além do objeto formData.

 

Share this post


Link to post
Share on other sites

Cara, precisei fazer parecido hoje, olha como consegui enviar um arquivo e minhas strings.

var fileData = new FormData();
var file_data = [];

fileData.append('id_conta', 10);

$('input[type="file"]').each(function(){
	file_data = $('input[type="file"]')[0].files;
	fileData.append('arquivo[]', file_data[0]);
});

let request = $.ajax({
  url: "minha_url.php",
  type: "POST",
  data: fileData,
  contentType: false,
  processData: false,
});
request.done(function (data) {
	// retorno data
});

Aí no PHP recebo o $_POST e o $_FILES.

Share this post


Link to post
Share on other sites

Deixa eu ver se entendi...

var fileData = new FormData();
var file_data = [];

fileData.append('id_conta', 10);

@marcosmarcolin

No trecho acima você está atachando (id_conta, 10)  ao objeto form, certo?

Não entendi isso... você atacha uma string direto ao "corpo" do objeto form? Quero entender só a lógica da coisa (pois não manjo de JQuery, uso JS puro).

Share this post


Link to post
Share on other sites

Olá Fabiano,

 

Bem acredito que você terá que tratar tudo dentro do formato de envio especifico seja 

$xhr.setRequestHeader('content-type', 'text/plain;charset=utf-8');

ou

xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

 

Terá que tratar os parametros juntos, se precisa de uma string junto com o Form coloque o valor que precisa dentro de um hidden field, se for Json ou outro formato... adicione junto dos parametros. E dependendo você pode adicionar esse valor na url e recuperar via get do lado que receber.

 

Enfim... se entendi corretamente o que precisa... talvez o que falei acima possa lhe ajudar.


Até!

Share this post


Link to post
Share on other sites

Olá @Uerlen Santos. Obrigado pelas sugestões.

 

Estou enfrentando problemas com truncamento de caracteres acentuados no lado servidor.

Abri mão da abordagem de recuperar o valor dos campos (no lado servidor) da forma convencional pelo motivo acima.

 

Então estou pensando em outra abordagem: enviar o formData (que levará um arquivo anexo) e enviar texto "fora do objeto formData", mas no mesmo momento em que envio o formData por AJAX. Não sei se isso  dará certo...preciso testar.

 

Quanto a enviar o valor na URL eu também pensei. Fiz uns testes mas aí o texto chega mas form não vai. Vou explorar mais essa possibilidade.

 

Valew!

Share this post


Link to post
Share on other sites
5 horas atrás, FabianoSouza disse:

Deixa eu ver se entendi...


var fileData = new FormData();
var file_data = [];

fileData.append('id_conta', 10);

@marcosmarcolin

No trecho acima você está atachando (id_conta, 10)  ao objeto form, certo?

Não entendi isso... você atacha uma string direto ao "corpo" do objeto form? Quero entender só a lógica da coisa (pois não manjo de JQuery, uso JS puro).

 

Isso, o ('id_conta', 10) passei fixo apenas para o exemplo, mas eu envio os dados do meu formulário no lugar. Eu pego o valor do campo 'id_conta' e demais campos do meu formulário e adiciono no meu FormData(append), e depois por fim o anexo do campo 'File' do formulário, entendeu?

 

Na requisição eu envio apenas o FormData, que terá os campos que estou passando e o meu anexo. Aí lá no PHP recebo o anexo na global $_FILES e os demais valores em $_POST, que é o tipo da requisição Ajax.

 

Lá no PHP eu recebo $_POST['id_conta'] que será 10.

Share this post


Link to post
Share on other sites

@FabianoSouza os caracteres acentuados estão aparecendo como simbolos?

Se for... o problema é na codificação dos dados... Normalmente é utilizado UTF8... 

Não qual linguagem utiliza no lado do server... mas a maioria oferece um encoder/decoder para esses formatos.

Em php por exemplo é: 

https://www.php.net/manual/pt_BR/function.utf8-encode.php

 

Share this post


Link to post
Share on other sites

Olá @Uerlen Santos.
Meu amigo, fazendo uns testes aqui parece que enviado a string pela URL parece que resolve o meu problema de caracteres especiais truncados. Vou explorar mais para poder confirmar essa impressão.

 

Quanto ao problema de codificação é o seguinte. Uso ASP Clássico, já defini como UTF8 todos os manipuladores de cabeçalho suportados pela linguagem mas não resolveu.

 

  Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
  Response.Charset = "UTF-8"

 

Uma pergunta quanto a enviar dados pela URL. Sabe dizer se há algum tipo de limite de caracteres?

Pergunto isso porque em meu formulário há um campo para comentários...para até 1.000 caracteres.

Share this post


Link to post
Share on other sites

Olá @FabianoSouza

Existe alguma necessidade do arquivo que está enviando possuir o mesmo nome de quando é enviado?

 

Porque eu vejo a seguinte situação:

  • Usuário A envia um arquivo com o nome iMasters.jpg
  • Usuário B também envia um arquivo iMaster.jpg mas a imagem é diferente da anterior

Logo o usuário B vai substituir o arquivo do usuário A no servidor.

 

5 horas atrás, FabianoSouza disse:

Uma pergunta quanto a enviar dados pela URL. Sabe dizer se há algum tipo de limite de caracteres?

Pergunto isso porque em meu formulário há um campo para comentários...para até 1.000 caracteres.

Isso eu não sei dizer até fiquei curioso a respeito. Mas já enviei post com muito mais de 1.000 caracteres.

Share this post


Link to post
Share on other sites
Em 26/06/2019 at 06:14, Omar~ disse:

Olá @FabianoSouza

Existe alguma necessidade do arquivo que está enviando possuir o mesmo nome de quando é enviado?

 

Porque eu vejo a seguinte situação:

  • Usuário A envia um arquivo com o nome iMasters.jpg
  • Usuário B também envia um arquivo iMaster.jpg mas a imagem é diferente da anterior

Logo o usuário B vai substituir o arquivo do usuário A no servidor.

 

Isso eu não sei dizer até fiquei curioso a respeito. Mas já enviei post com muito mais de 1.000 caracteres.

Respondendo a sua pergunta.

Os arquivos serão renomeados (com o id do registro salvo no banco de dados).

Share this post


Link to post
Share on other sites
Em 24/06/2019 at 20:09, marcosmarcolin disse:

 

Isso, o ('id_conta', 10) passei fixo apenas para o exemplo, mas eu envio os dados do meu formulário no lugar. Eu pego o valor do campo 'id_conta' e demais campos do meu formulário e adiciono no meu FormData(append), e depois por fim o anexo do campo 'File' do formulário, entendeu?

 

Na requisição eu envio apenas o FormData, que terá os campos que estou passando e o meu anexo. Aí lá no PHP recebo o anexo na global $_FILES e os demais valores em $_POST, que é o tipo da requisição Ajax.

 

Lá no PHP eu recebo $_POST['id_conta'] que será 10.

@marcosmarcolin sua dica foi ótima! Entendi o conceito e apliquei.

 

Fiz dessa forma e resolveu o meu problema.

	$frmData.append('id',$idItem)

 

 

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 rxhxtx
      Boa tarde,
      nos meus estudos me deparei com mais um obstaculo,
      estava fazendo um tutorial sobre atualizacao de BD via ajax...
       
      os dados da pagina estao sendo atualizados perfeitamente, porem o PHP nao executa a funcao de colear os dados e atualizar o BD,
      <?php $connection = mysqli_connect('localhost' , 'root' ,'' ,'testes'); if(isset($_POST['user_id'])){ $user_fname = $_POST['user_fname']; $user_lname = $_POST['user_lname']; $user_email = $_POST['user_email']; $user_id = $_POST['user_id']; $result = mysqli_query($connection , "UPDATE `users_full` SET `user_fname`=`$user_fname` , `user_lname`=`$user_lname` , `user_email`= `$user_email` WHERE `user_id`=`$user_id`"); if($result){ echo 'data updated'; } } ?> se eu coloco 
      if(2+2 ==$){  
      e tiro os POST e coloco os valores ex: $user_fname = "carlinhos";
      atualiza, porem se deixo para ele pegar os dados vi post não funciona... so atualiza na pagina, mas o BD fica igual....
       
      qual é o erro? pq nao esta recebendo os POST??
       
      codigo da pagina é esse:
      <?php include 'listaUSUcon.php'; ?> <head></head> <body> <div class="container"> <table class="table"> <thead> <tr> <th>Firstname</th> <th>Lastname</th> <th>Email</th> <th>Action</th> </tr> </thead> <tbody> <?php $table = mysqli_query($connection ,'SELECT * FROM users_full'); while($row = mysqli_fetch_array($table)){ ?> <tr id="<?php echo $row['user_id']; ?>"> <td data-target="user_fname"><?php echo $row['user_fname']; ?></td> <td data-target="user_lname"><?php echo $row['user_lname']; ?></td> <td data-target="user_email"><?php echo $row['user_email']; ?></td> <td><a href="#" data-role="update" data-id="<?php echo $row['user_id'] ;?>">Update</a></td> </tr> <?php } ?> </tbody> </table> </div> <!-- Modal --> <div id="myModal" class="modal fade" role="dialog"> <div class="modal-dialog"> <!-- Modal content--> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <input type="text" id="user_id" class="form-control" readonly> </div> <div class="modal-body"> <div class="form-group"> <label>First Name</label> <input type="text" id="user_fname" class="form-control"> </div> <div class="form-group"> <label>Last Name</label> <input type="text" id="user_lname" class="form-control"> </div> <div class="form-group"> <label>Email</label> <input type="text" id="user_email" class="form-control"> </div> <input type="hidden" id="user_id" class="form-control"> </div> <div class="modal-footer"> <a href="#" id="save" class="btn btn-primary pull-right save">Update</a> <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Close</button> </div> </div> </div> </div> </body> <script> $(document).ready(function(){ // append values in input fields $(document).on('click','a[data-role=update]',function(){ var user_id = $(this).data('id'); var user_fname = $('#'+user_id).children('td[data-target=user_fname]').text(); var user_lname = $('#'+user_id).children('td[data-target=user_lname]').text(); var user_email = $('#'+user_id).children('td[data-target=user_email]').text(); $('#user_fname').val(user_fname); $('#user_lname').val(user_lname); $('#user_email').val(user_email); $('#user_id').val(user_id); $('#myModal').modal('toggle'); }); // now create event to get data from fields and update in database $('#save').click(function(){ var user_id = $('#user_id').val(); var user_fname = $('#user_fname').val(); var user_lname = $('#user_lname').val(); var user_email = $('#user_email').val(); $.ajax({ url : 'listaUSUcon.php', method : 'post', data : {user_fname : user_fname , user_lname: user_lname , user_email : user_email , user_id: user_id}, success : function(response){ // now update user record in table $('#'+user_id).children('td[data-target=user_fname]').text(user_fname); $('#'+user_id).children('td[data-target=user_lname]').text(user_lname); $('#'+user_id).children('td[data-target=user_email]').text(user_email); $('#myModal').modal('toggle'); } }); }); }); </script>  
       
      aquele include (listaUSUcon.php) é referente ao primeiro codigo que postei la em cima..
       
       
      para mim não faz sentido, pois aparentemente nao tem nada errado....
       
      alguem sabe onde estou errando???
       
       
       
       
       
       
       
       
    • By infonet
      Olá pessoal,
      Poderiam me ajudar?
      Preciso enviar o formulário via ajax, porém preciso pegar todos os valor de todos os inputs e excluir o valor de cada linha em três tabela.
      Pode ser que alguma tabela não tenha nenhum valor, mas tem tabela que pode ter 10 valores.
       
      Tentei fazer como estou enviando, mas não consegui...
      Obrigado!
       

      <form name='formResiduo'> <?php $sqlr_end = "SELECT e.idclie FROM tb_end e WHERE NOT EXISTS(SELECT i.idinc FROM tb_inc i WHERE e.idclie = i.idinc) ORDER BY e.idclie ASC"; $querye = $conn->query($sqlr_end); $linhas = $querye->num_rows; while($rowrend = $querye->fetch_assoc()) { $reidclie = $rowrend["idclie"]; if ($linhas == "0") { $linhase = ""; } else { $linhase = $linhas; } ?> <input type='text' name='valor[]' value='<?php echo $reidclie; ?>'> <?php } ?> <?php if ($linhase) { ?> <div class='emCursorD emBlkA' style='position:relative;font-size:14px;font-weight:300;'> <div style='position:absolute;width:calc(100% + 100px);height:100%;left:-10px;'></div> <div class='formImptG' style='border-radius:3px;padding:5px;margin-bottom:20px;'> <label> <div style='position:relative;border-bottom:1px solid #606060;padding-top:10px;margint-top:5px;'><?php echo $linhase; ?></div> </label> </div> </div> <?php } ?> <?php $sqlr_res = "SELECT r.idclir FROM tb_res r WHERE NOT EXISTS(SELECT i.idinc FROM tb_inc i WHERE r.idclir = i.idinc) ORDER BY r.idclir ASC"; $queryr = $conn->query($sqlr_res); $linhas = $queryr->num_rows; while($rowrres = $queryr->fetch_assoc()) { $rridclir = $rowrres["idclir"]; if ($linhas == "0") { $linhasr = ""; } else { $linhasr = $linhas; } ?> <input type='text' name='valor[]' value='<?php echo $rridclir; ?>'> <?php } ?> <?php if ($linhasr) { ?> <div class='emCursorD emBlkA' style='position:relative;font-size:14px;font-weight:300;'> <div style='position:absolute;width:calc(100% + 100px);height:100%;left:-10px;'></div> <div class='formImptG' style='border-radius:3px;padding:5px;margin-bottom:20px;'> <label> <div style='position:relative;border-bottom:1px solid #606060;padding-top:10px;margint-top:5px;'><?php echo $linhasr; ?></div> </label> </div> </div> <?php } ?> <?php $sqlr_his = "SELECT h.idclih FROM tb_his h WHERE NOT EXISTS(SELECT i.idinc FROM tb_inc i WHERE h.idclih = i.idinc) ORDER BY h.idclih ASC"; $queryh = $conn->query($sqlr_his); $linhas = $queryh->num_rows; while($rowrhis = $queryh->fetch_assoc()) { $rhidclih = $rowrres["idclih"]; if ($linhas == "0") { $linhash = ""; } else { $linhash = $linhas; } ?> <input type='text' name='valor[]' value='<?php echo $rhidclih; ?>'> <?php } ?> <?php if ($linhash) { ?> <div class='emCursorD emBlkA' style='position:relative;font-size:14px;font-weight:300;'> <div style='position:absolute;width:calc(100% + 100px);height:100%;left:-10px;'></div> <div class='formImptG' style='border-radius:3px;padding:5px;margin-bottom:20px;'> <label> <div style='position:relative;border-bottom:1px solid #606060;padding-top:10px;margint-top:5px;'><?php echo $linhash; ?></div> </label> </div> </div> <?php } ?> </form> <div class='passar emLineB emCursorP'>Passar</div> <script> $(document).ready(function() { $('.passar').click(function(passar) {     var formdata = new FormData($("form[name='formResiduo']")[0]);     var link = 'sys/incClient.php?teste=ex';      $.ajax({         dataType: 'json',         type: 'POST',         url: link,         data: formdata,         processData: false,         contentType: false,     success: function (result) {         var data = result.split('|');         var rA = data[0];         var rB = data[1];     if(rA == "sucesso") {     alert(rB);     }      return false;     }     }); }); }); </script>
       

      if($_GET['teste']=="ex") {     foreach($_POST['valor'] AS $lines) {          $sqlr = @mysqli_query($conn, "DELETE FROM tb_res WHERE idclir = '$lines'");     $sqle = @mysqli_query($conn, "DELETE FROM tb_end WHERE idclie = '$lines'");     $sqlh = @mysqli_query($conn, "DELETE FROM tb_his WHERE idclih = '$lines'");     }          $arrch = "sucesso"."|".$lines;     echo json_encode($arrch);     exit; }
    • By CharlieAldrin
      Estou tentando fazer um chat, e nele é necessário saber se um usuário continua na página do chat, para caso ele saia informar o outro usuário.
      Encontrei em alguns lugares como solução fazer um ajax conferindo se o usuário está "dando sinal de vida" de 10 em 10 segundos (por exemplo), porém não entendi como fazer isso e nem como colocar no código. Alguém pode me ajudar por favor? 
      Ou me informar se existe alguma forma melhor de conferir isso?
       
      Valeu desde já :) 
    • By Aureo Almeida
      Não tenho domínio do uso de Ajax e estou com problema para chamar uma função PHP de um arquivo. Num arquivo chamado atualiza.php possuo uma função para atualizar tabelas de um Banco de Dados com dois insert into, chamada function atualizaPdIt().
      Eu desejo que esta função seja chamada para dentro de um arquivo chamado finaliza_compra.php através do evento onclick de um imput button, que está assim:
      <button onclick=" atualizaCompra ()" class='imput-concluir'>Finalizar</button> O Script que coloquei no Head da página é este:
      <script> function atualizaCompra () { $.ajax({ url:'atualiza.php', complete: function (atualizaPdIt) { alert(atualizaPdIt.responseText); }, error: function () { alert('Erro'); } }); return false; } </script> Porém, a função não é executada. O que está errado? Para constar, o script de atualização do arquivo atualiza.php funciona perfeitamente bem quanto deixado dentro de um bloco de código da página finalizar_compra.php, portanto, não é nele que está o problema, mas na forma como estou chamando.
    • By andre2654
      Boa tarde, eu preciso de ajuda de vocês, estou com um problema que é o seguinte, eu preciso que quando a pessoa clicar na lixeira, exclua essa linha do banco de dados, mas como posso fazer? perdoem a minha inexperiência, mas já busquei bastante a respeito e nada.
×

Important Information

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