2016-10-22 1 views
0

Hallo allerseits, ich kämpfe und suche Lösungen für diese 3 Tage. Ich habe ein Problem, Daten von sharethis.com RESTapi zu erhalten. Ich arbeite mit jQuery und Laravel 5.2. Ich möchte Werte von diesem JSON erhalten: http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com, aber ich bin sehr frustriert, viele Methoden und Funktionen zu versuchen. Mein tatsächlicher Code ist dies:Ajax Jquery CORS funktioniert nicht

function setHeader(xhr) { 
xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); 
xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-Type'); 
xhr.setRequestHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS"); 
} 
$.ajax({ 
url: 'http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com', 
type: 'GET', 
beforeSend: setHeader, 
contentType: 'application/json; charset=utf-8', 
success: function() { alert("Success"); }, 
error: function() { alert('Failed!'); } 
}); 

Diese Anforderung gibt immer "fehlgeschlagen!" Zurück. Ich verstehe ein wenig, was CORS bedeutet, aber in der Praxis kann ich es nicht zum Laufen bringen. Irgendwelche Ideen? Dank ..

+0

*“Ich verstehe CORS "* ... klar Sie nicht, diese Header können nicht in der Anfrage eingestellt werden, sie müssen serverseitig gesetzt werden – charlietfl

+0

Hallo @charlietfl ich legte dies auf die erste Zeile meiner PHP-Datei: aber keine Änderung vornehmen ... irgendeine Idee? – Francisco

+0

@Francisco Dieser eine Header ist nicht genug. Sie benötigen 'Allow-Header' und' Allow-Methoden'. –

Antwort

1

Vielleicht eigentlich nicht verstehen Sie CORS :)

Diese Header in der Antwort vorhanden sein müssen, nicht in der Anfrage.

Der Server muss sie bereitstellen.

Der Server muss zustimmen.

Die von Ihnen angegebene URL hat keine CORS-Header, daher können Sie sie nicht über AJAX abrufen, wenn Sie das Backend nicht ändern.

0

Führen Sie diesen Code mit XMLHttpRequest zu bekommen Daten

var url = "http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com"; 

var xhr = createCORSRequest('GET', url); 

xhr.setRequestHeader(

'X-Custom-Header', 'value'); 

xhr.withCredentials = true; 

xhr.onload = function() { 

      if (this.status === 200) { 

       console.log(xhr); 
      } 

}; 

xhr.send(); 

Und es ist die Funktion, wenn die URL Unterstützung CORS

function createCORSRequest(method, url) 
{ 

var xhr = new XMLHttpRequest(); 

if ("withCredentials" in xhr) { 
    // XHR for Chrome/Firefox/Opera/Safari. 
    xhr.open(method, url, true); 

    console.log("for chrome/fir"); 
} else if (typeof XDomainRequest != "undefined") { 
    // XDomainRequest for IE. 
    xhr = new XDomainRequest(); 
    xhr.open(method, url); 

    console.log("ie"); 
} else { 
    // CORS not supported. 
    xhr = null; 
    console.log("not supported"); 
} 
return xhr; 
} 

zu überprüfen hoffe, es hilft, in Bezug auf

+0

Hallo Danke für die Hilfe, aber die Konsole sagt immer noch: XMLHttpRequest kann http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com nicht laden. Die Antwort auf die Preflight-Anforderung übergibt die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Origin 'http: // localhost' ist daher nicht erlaubt. – Francisco