2016-05-13 14 views
1

Ich versuche, einen AJAX-Aufruf (CORS) mit dem folgenden Code zu machen:PHP-AJAX CORS-Fehler aufgrund Access-Control-Allow-Origin

$.ajax({ 
    type: "POST", 
    url: 'http://localhost/MySpace', 
    success: function(result) { 
     console.log(result); 
    }, 
    error: function() { 
     console.log("error"); 
    }, 
}); 

ich den obigen Code leite aus:

http://127.0.0.1/Test/index.html 

Der PHP-Code auf http://localhost/MySpace geschrieben ist wie folgt:

<?php 
    header("Access-Control-Allow-Origin: *"); 
    echo "Hello"; 
?> 

gemäß meinem Verständnis dieses gearbeitet haben soll. Allerdings bekomme ich diesen Fehler:

XMLHttpRequest cannot load http://localhost/MySpace. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1' is therefore not allowed access. 

Was soll ich tun, damit dies funktioniert? Oder mache ich etwas völlig falsches?

Per Vorschläge, um die Anfrage zu debuggen Ich habe versucht, eine Locke antrag:

curl -i http://127.0.0.1/MySpace/ 

Als Antwort kann ich sehen, dass Access-Control-Allow-Origin markiert als *:

HTTP/1.1 200 OK 
Date: Fri, 13 May 2016 05:59:19 GMT 
Server: Apache/2.4.18 (Unix) OpenSSL/1.0.2g PHP/5.6.19 mod_perl/2.0.8-dev Perl/v5.16.3 
X-Powered-By: PHP/5.6.19 
Access-Control-Allow-Origin: * 
Content-Length: 5 
Content-Type: text/html; charset=UTF-8 

Gemäß dem Kommentar I den folgenden Code zu meinem .htaccess hinzugefügt:

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

@Edit:

Dies ist meine Antwort-Header:

HTTP/1.1 301 Moved Permanently 
Date: Fri, 13 May 2016 09:26:44 GMT 
Server: Apache/2.4.18 (Unix) OpenSSL/1.0.2g PHP/5.6.19 mod_perl/2.0.8- dev Perl/v5.16.3 
Location: http://localhost/elasticservice/ 
Content-Length: 240 
Keep-Alive: timeout=5, max=99 
Connection: Keep-Alive 
Content-Type: text/html; charset=iso-8859-1 

Das ist mein Request-Header:

POST /elasticservice HTTP/1.1 
Host: localhost 
Connection: keep-alive 
Content-Length: 0 
Cache-Control: max-age=0 
Accept: */* 
Origin: http://127.0.0.1 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 
Referer: http://127.0.0.1/test/ 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8,hi;q=0.6 
+0

Versuchen .htaccess Lösung mit Zugriff erlauben Herkunft. – HddnTHA

+0

Ich habe versucht, .HTACCESS hinzuzufügen. Aber es funktioniert immer noch nicht. Ich habe die Frage bearbeitet und haben den .HTACESS Inhalt –

+0

'hinzugefügt \t \t \t Kopfsatz Access-Control-Allow-Origin "*" \t 'Ich verwende diesen' .htaccess' Code Block um meine cordova ios App zu füttern. Sie können Dateitypen ändern oder Berechtigungen für alle Dateitypen erteilen. – HddnTHA

Antwort

1

Sie CORS Herkunft erlaubt haben, so dass für den Zugang Cross-Domain-3-Header (Origin, Methods, Headers) Pflicht , siehe unten Beispiel Kopfzeilen

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, OPTIONS, PUT, DELETE"); 

@update: Sie können diese Lösung versuchen

header('Access-Control-Allow-Origin: *'); 
     if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
      $headers=getallheaders(); 
      @$ACRH=$headers["Access-Control-Request-Headers"]; 
      header("Access-Control-Allow-Headers: $ACRH"); 
     } 

header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE"); 
+0

Nein! funktioniert nicht..! Immer noch das gleiche Problem. –

+0

haben Sie 'Access-Control-Allow-Headers:' Wert von Ihrem API-Header geändert? – Girish

+0

api Anfrage Header? Ich habe nur drei Dateien: '.php' Dienst des AJAX,' .html', der AJAX aufruft, 'HTACCESS' wie im Kommentar vorgeschlagen. –

0

die folgende URL versuchen:

$.ajax({ 
    type: "POST", 
    url: 'http://127.0.0.1/MySpace', 
    success: function(result) { 
     console.log(result); 
    }, 
    error: function() { 
     console.log("error"); 
    }, 
}); 
+0

aufrufen Dies wird ovariy funktionieren. Denn für localhost wird es nicht als CORS betrachtet. –