10 Stimmen

Lernen, wie man AJAX mit CodeIgniter verwendet

Es ist ein bisschen peinlich, dass ich es so schwierig finde, JavaScript zu lernen, aber

Nehmen wir an, ich habe einen wirklich einfachen Controller wie diesen:

class front extends Controller {

    public function __construct()
    {
        parent::Controller();   
    }

    public function index()
    {
        //nothing!
    }

    public function test () {

        $someNumber = $this->input->post('someNumber');

        if ($someNumber == 12) { return TRUE; }

    }

}

Ja, das könnte man wahrscheinlich besser schreiben, haha.

Was ich wissen möchte, ist - wie könnte ich JavaScript verwenden, um eine Zahl in einem Formular zu übermitteln (ich kümmere mich um Validierung und Modelle später), wie sollte ich meine test()-Funktion schreiben, so dass es etwas lesbar durch das JavaScript zurückgibt (ich nehme an, return TRUE wahrscheinlich nicht funktionieren würde, vielleicht XML oder JSON oder so etwas?

Ich weiß, dass es Frameworks wie jQuery gibt, die dabei helfen, aber im Moment möchte ich es nur auf der einfachsten Ebene verstehen und alle Tutorials und Anleitungen, die ich bisher gefunden habe, sind viel zu tief für mich. Ein Beispiel in jQuery oder was auch immer wäre gut zu sein.

Herzlichen Dank :)

2 Stimmen

Kein Grund zur Sorge, kein Körper ist perfekt

0 Stimmen

+1 Auch ich finde JavaScript ein bisschen schwierig, aber mit viel Übung wird man es schaffen.

14voto

Owen Punkte 79611

Sie würden es im Grunde nur ausdrucken und diese Informationen über Javascript wieder einfangen:

public function test() {
    $somenumber = $this->input->post('someNumber');
    if ($somenumber == 12) {
        print "Number is 12";
    } else {
        print "Number is not 12";
    }
}

Ihr Javascript könnte etwa so aussehen:

var xhr;
xhr = new XMLHTTPRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        // this is where the return information is
        alert('Status: '+xhr.status+' Response: '+xhr.responseText);
    }
}

xhr.open('POST', '/front/test');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('someNumber=12');

Der obige Code berücksichtigt keine browserspezifischen Probleme, sollte aber zumindest auf Firefox/E7 laufen, glaube ich.

Hier ist ein jQuery-Beispiel für alle oben genannten Punkte:

var options = {
    'someNumber' : 12
}

$.post('/front/test', options, function(data) {
    alert(data); // should print "Number is 12"
});

0 Stimmen

Die erste mit XMLHTTPRequest funktioniert nicht für mich und gibt Fehler als XMLHTTPRequest ist nicht identifiziert.... oder etwas. Aber die zweite mit Jquery funktioniert gut. Danke vielmals.

3voto

Phil Lowe Punkte 31

Ich habe auch in CodeIgniter festgestellt, dass 'XMLHTTPRequest' nicht in den Antwort-Headern zurückgegeben wird, wenn der Standard-Javascript-AJAX-Aufruf wie oben erwähnt verwendet wird.

$this->input->is_ajax_request();

Die Eingabehilfe gibt niemals true zurück, es sei denn, Sie verwenden jQuery, um die AJAX-POST-Anfrage zu bearbeiten.

Ich habe auch die Methode in diesem Artikel ausprobiert, die nicht funktioniert hat: http://developer.practicalecommerce.com/articles/1810-The-Benefit-of-Putting-AJAX-and-CodeIgniter-PHP-Together

Das habe ich schließlich verwendet:

    var query_params = $('#data-form').serialize();
    $.ajax({
        type: 'POST',       
        url: 'process_this.php",
        data: queryParams,
        context: document.body,

    success: function(){
        alert('complete'); // or whatever here
    }

Möglicherweise liegt es an einem Konfigurationsproblem, das mit meiner CI-Installation zu tun hat, ich hatte noch keine Zeit, das zu untersuchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X