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

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top