Formulário de contato AJAX no CodeIgniter
-
25-09-2019 - |
Pergunta
Algumas perguntas:
Estou usando CI e JQuery AJAX.
No meu código abaixo, eu monto dataString
, que por padrão é anexado ao URL como uma string de consulta.
Eu mudei o "tipo" do AJAX para POST, então minha pergunta é - como faço para acessar dataString
no meu aplicativo CI?
Parece que ainda tenho que usar
$name=$this->input->post('name')
O que para mim torna a configuração dataString
redundante?
--
Tentei pesquisar, mas não consigo encontrar nada concreto.
Seria possível ainda fazer uso da biblioteca de validação de CIs e AJAX?
if($this->form_validation->run() == FALSE)
{
// what can i return so that my CI app shows errors?
}
Normalmente você recarregaria o formulário de contato ou redirecionaria o usuário.Em um mundo ideal, gostaria que as mensagens de erro fossem mostradas ao usuário.
Jquery:
$(document).ready(function($){
$("#submit_btn").click(function(){
var name = $("input#name").val();
var company = $("input#company").val();
var email = $("input#email").val();
var phone = $("input#phone").val();
var message = $("textarea#message").val();
var dataString = 'name=' + name + '&message=' + message + '&return_email=' + email + '&return_phone=' +
phone + '&company=' + company;
var response = $.ajax({
type: "POST",
url: "newsite/contact_ajax/",
data: dataString
}).responseText;
//$('#contact').hide();
//$('#contact').html('<h5>Form submitted! Thank you!</h5><h4>We will be in touch with you soon.</h4>');
//$('#contact').fadeIn('slow');
return false;
});
});
espero ter sido claro o suficiente - se alguém tiver um exemplo decente de formulário de contato de CI, seria ótimo.há coisas misturadas na internet, mas nada que atinja todas as caixas.
obrigado
Solução
Como escrevi nos comentários, você não precisa definir um dataString
Já que o jQuery pode fazer isso por você:
$(document).ready(function($){
$("#submit_btn").click(function(){
var response = $.ajax({
type: "POST",
url: "newsite/contact_ajax/",
data: $(your_form_id).serialize()
}).responseText;
//$('#contact').hide();
//$('#contact').html('<h5>Form submitted! Thank you!</h5><h4>We will be in touch with you soon.</h4>');
//$('#contact').fadeIn('slow');
return false;
});
});
Outras dicas
Se você usar o jQuery $.post() função, você pode nomear explicitamente as variáveis de postagem e acessá-las em seu controlador da maneira sugerida em sua pergunta.
$.post("<?php echo site_url("newsite/contact_ajax/";?>",
{my_name:name,my_company:company,my_email:email,my_phone:phone,my_message:message},
function(){
//callback function
},
html
);
No seu controlador:
$this->input->post('my_name');
$this->input->post('my_company');
//etc