2017-05-12 4 views
0

Ich versuche Post einige Daten auf Ajax für das Speichern in einem Controller zu erreichen, aber definitiv unmöglich, sie in meinem Controller zu bekommen, jedes Mal, wenn der Post leer ist.Codeigniter 3/Ajax/Not receiving Postdaten

Das ist mein Ajax-Code (einfache Version, aber überhaupt nicht funktionieren):

$(document).on("click",'.ajax_test',function(){ 

    $.ajax({ 
     type:'POST', 
     url:_SITE_URL+"ajax-test", 
     ContentType : 'application/json', 
     cache:false, 
     data:{'test':"ok"}, 
     success:function(msg){ 
       alert(msg); 
     }, 
     fail:function(msg){ 
      alert("failed"); 
     } 
    }); 

}); 

Und meinen Controller:

public function test_ajax(){ 

if($this->input->is_ajax_request()): 
    echo $this->input->post("test"); 
endif; } 

Wenn ich es senden, kein Problem mit dem Link, aber mein Javascript gibt nichts zurück. Ich habe viele Dinge ausprobiert, meine Konfiguration sieht gut aus (csrf_protection ist jetzt falsch) Es funktionierte perfekt mit CI 2, aber da ich nach CI 3 migriere, weigere ich mich zu arbeiten. Also, was mache ich falsch? Oder welche Art von Konfiguration muss ich am Codezeichner überprüfen?

Vielen Dank durch Voraus

+0

ein print_r Do ($ _ POST) und sehen, was das zeigt. Überprüfen Sie auch, ob $ this-> input-> is_ajax_request() wahr ist. – Danny

+0

[Haben Sie die AJAX-Anfrage/-Antwort in den Entwicklertools des Browsers gesehen? Haben Sie die jQuery-Bibliothek in das Projekt aufgenommen? Werden Fehler gemeldet? Laufen Sie das auf einem Webserver?] (Http://jayblanchard.net/basics_of_jquery_ajax.html) –

Antwort

0

ContentType : 'application/json', aus Ihren Ajax-Optionen entfernen. Es wird nicht benötigt und ist verwirrend. Wenn Sie die Ajax-Option data: auf ein Objekt setzen (wie Sie es korrekt sind), wird es auf die Weise an den Server gesendet, wie es der Controller erwartet.

Das andere mögliche Problem ist mit der .ajax URL-Option. Sie haben

url:_SITE_URL+"ajax-test", 

Und wenn _SITE_URL nicht richtig dann der Controller gefunden wird, nicht der Fall. in resultierenden

404 Seite nicht gefunden

Sie den Fehler nicht zu sehen, weil Sie die falsche Ajax-Option verwendet haben, mit

`fail:function(msg){` 

fail ist eigentlich eine Funktion. Dezenter Unterschied zwischen Option und Funktion hier. Untersuchen Sie die ordnungsgemäße Verwendung. sie alle zusammen Ihren Ajax-Aufruf Putting ähnlich

$.ajax(
{ 
     type: "POST", 
     url: "controller_name/ajax-test", 
     cache: false, 
     data: {test: "ok"}, 
     success: function (data) { 
      alert(data); 
     }, 
    }).fail(function() { 
    alert("failed"); 
}); 

Hinweis aussehen sollte, wie .fail-$.ajax() gekettet ist und nicht in dem Satz von Ajax-Optionen verwendet.

+0

Vielen Dank! Nun, meine globale _SITE_URL wurde definiert (refer auf base_url), aber es ist eine multi-lang, und ich habe einfach verpasst, die lang für die Anfrage Link zu übergeben. Also, ich hatte keinen Fehler, um den Controller zu erhalten, aber er nie mit "ihm" die Daten genommen. Danke noch einmal ! – loximose

0

Ich benutze diese Vorlage von AJAX-Request:

var _data = {};  
    $.ajax({ 
       type: 'POST', 
       url: "/mycontroller/myfunction", 
       data: { 
        insertiondata: _data 
       }, 
       beforeSend: function() { 

       }, 
       complete: function() { 

       }, 
       success: function(_result) { 
        console.log(_result) 
       } 
      }); 

Im Controller ich die params wie diese zu fangen:

... 
class Mycontroller extends MY_Controller { 

    public function __construct() {} 
    public function myfunction(){ 

     $mydata= $_POST['insertiondata']; 
     .... 
} 
... 

Hope this Hilfe. Good Luck,

0

Ihr fehlt die Funktion test_ajax auf Ihrer URL verwenden datatype

$(document).on("click",'.ajax_test',function(){ 

    var SITE_URL = "<?php echo base_url();?>"; 

    $.ajax({ 
     type:'POST', 
     url: SITE_URL + "ajax_test/test_ajax", 
     cache:false, 
     dataType: 'json', 
     data:{ 
      'test':"ok" 
     }, 
     success:function(msg){ 
      alert(msg['test']); 
     }, 
     error:function(msg){ 
      alert("failed"); 
     } 
    }); 
}); 

Vergewissern Sie sich, Dateinamen und Klassennamen nur den ersten Buchstaben Großbuchstaben haben. Codeigniter case sensitive.

Dateiname: Ajax_test.php

Verwenden json_encode

<?php 

class Ajax_test extends CI_Controller { 

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

public function test_ajax(){ 

    $data['test'] = $this->input->post("test"); 

    echo json_encode($data); 

} 

} 
+0

'url: SITE_URL +" ajax_test/test_ajax ",' sollte 'url sein:" ",' –