2016-05-06 6 views
0

Ich habe das folgende Skript (simplfied), die einige Daten aus einer lokalen PHP-Datei packt:JQuery/AJAX: Cross-Origin-Anforderung blockiert

$(document).ready(function(){ 

    var current_date = "x=y"; 

    $.ajax 
    ({ 
    url: 'work/get_cal.php', 
    type: 'post', 
    data : current_date, 
    async: false, 
    success: function(result) 
    { 
     alert('never gets this far'); 
    } 
    }); 

}); 

Jedoch habe ich eine Cross-Domain-Fehler erhalten, auch wenn alles auf ist derselbe Server. Hat jemand dieses Problem schon einmal gehabt?

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://www.mywebsite.co.uk/work/get_cal.php. (Reason: CORS header 'Access-Control-Allow-Origin' missing). 
+0

Testen Sie es in Chrome, das gibt bessere Fehlermeldungen und informiert Sie über alle beteiligten Ursprünge. – Quentin

+0

Untersuchen Sie die Registerkarte "Netzwerk" Ihrer Entwicklertools. Siehst du die Anfrage und Antwort? Sind sie das, was Sie erwarten? (Am wichtigsten, erhalten Sie eine 3xx Redirect zu einem anderen Ursprung?) – Quentin

+0

Verwenden Sie Jsonp als Datentyp. Nicht Json. Jsonp ist für Kreuzursprung Kommunikationen –

Antwort

1

Add folgende Zeile get_cal.php

header('Access-Control-Allow-Origin: *'); 

Dies ermöglicht Cross-Origin Antrag zu machen.

+0

Es stellt sich die Frage, warum sie einen herkunftsübergreifenden Fehler erhalten, wenn sie versuchen, die gleiche Ursprungsanforderung zu stellen. Sie fragen nicht, wie die ursprungsübergreifende Sicherheit deaktiviert werden kann. – Quentin

-1

Von Kommentaren zur Originalfrage für zukünftige Google-Mitarbeiter.

Der Code verwendete absolute Pfade und landete in verschiedenen Domänen "level", wenn auf die Seite mit www zugegriffen wurde und das Skript ohne www anforderte. Dies verursachte ein CORS-Problem.

+0

Warum der Downvote? Dies ist die richtige Antwort, wie OP bestätigt hat! – Uzbekjon

-1

Same Origin Policy erlaubt Skripte in einem Browser ausgeführt wird und ermöglicht machen Anfragen zu Seiten mit dem SAMEURI-Schema, Hostnamen und Portnummer. Dies ist für die Sicherheit in den meisten Browsern implementiert.

Ich persönlich benutze Chrome mit Web Security Deaktiviert während des Testens. Verwenden Sie den Parameter --disable-web-security, um dies in Ihrem Chrome zu aktivieren.

Ich rate dringend eine separate Abkürzung für Entwicklung & Testzwecke und NICHT Erstellen Sie diese Option für die regelmäßige Surfen zu verwenden ...

"C:\<path_to_chrome_folder>\chrome.exe" --user-data-dir="C:/Chrome dev session" --disable-web-security

--user-data-dir wird verwendet, um die Sitzungsdetails zu speichern und andere Browserdaten getrennt von Ihren normalen Browserdaten.

--disable-web-security deaktiviert die Sicherheit und damit die Same Origin Policy Warnung.

Hoffe, das hilft ...!

+0

Dies beantwortet nicht die Frage (die fragt, warum sie einen Ursprung-Fehler für eine gleiche Ursprungsanforderung erhalten) – Quentin

+0

Dies beantwortet, warum der Fehler auftritt und wie es nur für Dev & Testzwecke umgehen ... Ähnliche Antwort hat wurde von Deepak Adhikar ohne irgendwelche Erklärungen zu dem Fehler gegeben, warum hast du nicht auch seine Antwort abgelehnt? – SSG