2017-02-25 4 views
1

Ich versuche, mit AJAX-Anfrage in meiner Codeigniter-App zu arbeiten. Am Ende meiner codeigniter Controller-Funktion, fügte ichVermeidung von CORS funktioniert nicht in Codeigniter

public somefunction(){ 

$this->output->set_header('Access-Control-Allow-Origin: *'); 
$this->output->set_header('Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE'); 
$this->output->set_content_type('application/json'); 
// plan contains array 
return $this->output->set_output(json_encode($plan)); 
} 

Normal get request works via server to server, but AJax calls shows the error. XMLHttpRequest cannot load localhost:8888. Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

Hier ist die Ajax-Aufrufe

ist
self.information = function() { 
     $.ajax({ 
      type: 'GET', 
      url: '', 
      contentType: 'application/json; charset=utf-8' 
     }) 
     .done(function(result) { 
     console.log(result); 
     }) 
     .fail(function(xhr, status, error) { 
      alert(error); 
     }) 
     .always(function(data){ 
     }); 
    } 

die URL funktioniert, da ich es mit Postbote überprüft und ich erhalte Daten ist zurückgekommen. Also kein Problem damit.

+0

http://stackoverflow.com/questions/20511988/set-cross-domain-in-codeigner schlägt vor, den AJAX-Inhaltstyp der Anforderung zu ändern. Vielleicht einen Versuch wert. – apokryfos

+0

@apokryfos das war eines der ersten Dinge, die ich versuchte .. – FaF

+0

Übrigens ist der 'Header (' Teil in der 'set_header' wirklich dort oder ist es ein Kopieren/Einfügen Tippfehler? – apokryfos

Antwort

0

ich über das gleiche Problem heute gekommen, was für mich gearbeitet wurde die Definition der index_options Methode

public function index_options() { 
    return $this->response(NULL, REST_Controller::HTTP_OK); 
} 

und Aktualisierung meint den Konstruktor diesen

public function __construct(){ 
    parent::__construct(); 
    header('Access-Control-Allow-Origin: *'); 
    header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method"); 
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE"); 
} 

Leider bin ich vertraut genug, um nicht mit Zugriffskontrolle, um zu erklären, warum das für mich funktioniert hat. Hoffe das hilft.

+0

Hallo Awad, also ich füge es zu meiner somefunction() ??? Wie funktioniert das Ganze Sache zusammen arbeiten? – FaF

+0

@Farhana nur die index_options Funktion genau wie Ihre Funktion somefunction definieren, die den Browser davon abhalten wird, sich über die Preflight OPTIONS Anfrage zu beschweren t, verschiebe die Header-Änderungen in den Konstruktor –

+0

die index_options-Funktion wird sowieso nicht aufgerufen, wie wird es geladen? Oder lädt der Ci automatisch? – FaF

Verwandte Themen