Mi sto imbattendo in problemi di politica della stessa origine in Javascript. Ho letto su una soluzione alternativa per questo utilizzando la variabile document.domain
, ma non riesco a far funzionare la soluzione alternativa. La soluzione è che si dovrebbe essere in grado di impostare document.domain
a 'example.com'
in modo che se si esegue il codice da foo.example.com
è possibile caricare i dati tramite XHR da bar.example.com
.Soluzione per la politica della stessa origine che utilizza document.domain in Javascript
dettagli sulla soluzione sono qui:
https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript
Il mio codice di esempio - che non produce i risultati desiderati - è gestito da un URL del tipo http://foo.example.com/
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<script>
document.domain = 'example.com';
window.onload = function() {
var req = new XMLHttpRequest();
var url = 'http://bar.example.com/';
req.open('GET', url, true);
req.onreadystatechange = function (aEvt) {
if (req.readyState == 4) {
var elem = document.getElementById('result');
if (req.status == 200) {
var data = req.responseText;
} else {
var data = "Error loading page: " + req.status;
}
elem.innerHTML = data;
}
};
req.send(null);
};
</script>
Result:<hr>
<div id="result"></div>
</body>
</html>
L'output di questo codice:
Result: Error loading page: 0
Se cambio url
in 'http://foo.example.com/'
, tutto funziona correttamente. C'è un bug nel mio codice di esempio?
Non voglio utilizzare un proxy perché sono più lenti, meno efficienti e aumenteranno il traffico sul nostro server web. Sarebbe davvero bello se questa soluzione funzionasse davvero. Questa soluzione è "torta nel cielo"?
Grazie a j0rd4n, questo è esattamente il tipo di soluzione non proxy che stavo cercando, anche se stavo abbaiando dall'albero sbagliato con document.domain. Ho trovato un po 'più di informazioni sullo schema che chiamano JSONP e su come jQuery ha incorporato anche questa funzionalità, che è al di fuori della portata della mia domanda, ma comunque interessante: http://www.ibm.com/developerworks/library/wa-aj-jsonp1/ – Rubix
Il processo che ho citato utilizza JSONP ma lo fa in senso manuale. jquery gestirà la "ricezione" di JSONP nel DOM javascript, ma è comunque necessario fornire un servizio che restituisca il testo JSONP. Alla fine della giornata, la pagina del server deve restituire JSONP formattato. Il tuo JavaScript (che sia jquery, ext-js, ecc.) Deve effettuare la chiamata per eseguire lo script all'interno di un tag script. –