2011-01-05 16 views
1

Wenige Fragen:AJAX-Kontaktformular in CodeIgniter

Ich verwende CI und JQuery AJAX.

In meinem Code unten assembliere ich dataString, die standardmäßig an die URL als Abfragezeichenfolge angefügt wird.

Ich habe den AJAX "Typ" auf POST geändert, also meine Frage ist - wie greife ich auf dataString in meiner CI-App?

Es scheint, ich habe noch

$name=$this->input->post('name')

zu benutzen, die mir, macht dataString redundante Einstellung?

-

ich gesucht habe versucht, aber kann wirklich nichts Konkretes finden.

Wäre es möglich, immer noch CIs Validierungsbibliothek und AJAX zu verwenden?

if($this->form_validation->run() == FALSE) 
{ 
    // what can i return so that my CI app shows errors? 
} 

Normalerweise würden Sie das Kontaktformular neu laden oder den Benutzer umleiten. In einer idealen Welt möchte ich, dass die Fehlermeldungen dem Benutzer angezeigt werden.

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; 
     }); 
    }); 

Hoffnung i klar genug waren - wenn jemand ein anständiges Beispiel eines CI Kontaktformular hat, die groß sein würde. Es gibt gemischte Sachen im Internet, aber nichts, was alle Kisten trifft.

dank

+0

'Daten : $ (your_form_id) .serialize(), '? – ifaour

Antwort

4

Wie ich in den Kommentaren geschrieben, Sie brauchen kein dataString zu setzen, da jQuery es für Sie tun können:

$(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; 
    }); 
}); 
+0

also 'dataString' ist streng für GET richtig? macht Sinn, nehme ich an. Also würde ich einfach auf Daten von Formularvariablen im Standard-CI-Weg zugreifen? 'data:' wird zu einem provisorischen POST-Array? Danke ~ – Ross

+2

Nein, lesen Sie bitte [$ .ajax] (http://api.jquery.com/jQuery.ajax/), werden Sie nicht verwirrt, wenn Sie $ .ajax verwenden, verwenden Sie nicht mehr die klassische Formularübergabe (die Form ist mehr wie Datenhalter jetzt und ein Fallback, wenn JS deaktiviert ist) ... der Browser sendet an die 'URL' was auch immer Sie es zur Verfügung stellen, so dass die' Daten' sowohl für 'POST' als auch' GET' Anfragen verwendet werden, was die serialize() tut, spart nur Ihre zeit und bereitet den 'dataString' für Sie vor! – ifaour

3

Wenn Sie die jQuery $.post() Funktion zu verwenden, Sie explizit die POST-Variablen benennen können, so dass sie dann in Ihrem Controller zugreifen, wie Sie in Ihrer Frage vorgeschlagen.

$.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 
    ); 

in Ihrem Controller:

$this->input->post('my_name'); 
$this->input->post('my_company'); 
//etc