2013-02-08 4 views
6
erlaubt ist

Ich versuche, eine http zu bekommen: // JavaScript-Datei über xhr aber ich in den Fehler leite oben erwähnt.XMLHttpRequest kann nicht geladen Origin nicht von Access-Control-Allow-Origin

Hier ist mein Code:

function getXHR() { 
    var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; 

    if (is_chrome) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", "http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true", true); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4) { 
     var s = document.createElement('script'); 
     s.textContent = xhr.responseText; 
     (document.head||document.documentElement).appendChild(s); 
     s.parentNode.removeChild(s); 
     } 
    } 
    xhr.send(); 
    } 
} 

Diese nur für Chrome ist, weil ich das Skript in https verwenden möchten: // aber Chrome blockiert automatisch etwas von http: //. Auf dem Server, von dem ich das Skript erhalte, wird https: // nicht ausgeführt, und ich BENÖTIGE das Skript/habe mehrere Skripts, die ich lieber nicht alle in eine Datendatei kopieren würde.

Der Fehler Ich laufe in:

XMLHttpRequest cannot load http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true. Origin https://mysite.com is not allowed by Access-Control-Allow-Origin. 
+0

[Gleichen Ursprungsrichtlinie] (https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript) – epascarello

Antwort

4

Legen Sie einfach den <script> Tag direkt statt diesen XHR-Wrapper und dann den Inhalt zu einem <script> Tag eingefügt wird.

Außerdem weiß ich nicht, warum Sie versuchen, das Skriptelement nach dem Laden zu entfernen. Dies wirkt sich nicht auf die Objekte/Methoden/Variablen aus, die in diesem Code erstellt wurden.

+1

Das ist richtig. Sie können dies nicht über XHR tun, wenn die Domänen unterschiedlich sind. Lesen Sie: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control – marekful

+0

Diese Option ist nicht ganz die http lösen: // und https: // Problem, das ich habe . (dh [blockiert] Die Seite auf https://mysite.com lief unsicherer Inhalt von http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true) – user11235

+0

ich bin nicht ganz sicher, aber ich glaube nicht, dass das Problem etwas mit http vs https zu tun hat, es ist ein Problem von domänenübergreifenden Ressourcen, die blockiert werden, ob die Ressource http oder https ist. – speakingcode

1

Browser-Block XHR Anfragen an einen Server, der andere ist der Server der Seite der diesen Antrag gestellt, für Sicherheitszwecke im Zusammenhang mit Cross-Site-Scripting.

Wenn es nur ein Skript, das Sie laden möchten, verwenden Sie

<script src="..."></script> 

Für allgemeine XHR, können Sie die JSONP Abhilfe verwenden, wenn die api es bietet, oder die Betreiber der API fragen CORS zu ermöglichen (Cross-Origin Resource Sharing)

http://developer.chrome.com/extensions/xhr.html https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS http://www.w3.org/TR/cors/ http://en.wikipedia.org/wiki/JSONP

3

I fu geändert ll Pfad der Serverdatei zum kurzen Pfad wie folgt.

$.post('http://example.com/pages/loadRandomImages.php',{'type':'loadRandomImages','loadingReq':'True'},function(data){ 

------------ 
---------- 
}); 

es geändert zu,

$.post('/pages/loadRandomImages.php',{'type':'loadRandomImages','loadingReq':'True'},function(data){ 

------------ 
---------- 
}); 

Dann arbeitete in Chrom in Ordnung.

+0

Ich wollte nur Danke für diese Antwort sagen !! Ich hatte eine XMLHttpRequest.open() -Anweisung, die wegen des oben genannten domänenübergreifenden Fehlers nicht funktionierte, und indem ich stattdessen einen relativen Pfad verwendete, funktionierte Chrome perfekt. Vielen Dank. – AlexScript

+0

Gern geschehen und danke für den Kommentar! –

Verwandte Themen