2010-12-03 18 views
2

J'essaie d'utiliser ajax pour accéder à certaines données sur mon site Web à partir d'un script que je veux être en mesure d'exécuter n'importe où. Le code ajax de mon script ressemble à quelque chose comme çaPourquoi ai-je une erreur Access-Control-Allow-Origin lorsque j'essaie d'utiliser ajax pour accéder à une page?

var ajax = new XMLHttpRequest(); 
ajax.open('GET', 'http://mywebsite.com/page?i=2&json', true); 
ajax.onreadystatechange = function() { 
    if (ajax.status == 200) { 
    console.log(JSON.parse(ajax.responseText)); 
    } 
    else 
    console.log('Could not connect.'); 
} 
ajax.send(); 

Mais quand je le lance je reçois l'erreur

XMLHttpRequest ne peut pas charger http://mywebsite.com/page?i=2&json. Origine http://anotherwebsite.com est non autorisé par Access-Control-Allow-Origin.

Sur le script sur mon site, j'ai les lignes suivantes à l'intérieur de la page,

header('Content-Type: application/json'); 
header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET'); 

Mais je reçois toujours la même erreur. Je veux que cette page sur mon site soit accessible à partir de n'importe quelle autre page sur Internet via ajax, car mon script est une extension qui devrait être utilisable sur n'importe quel site web. Ok J'ai réussi à ce résultat si je définissais l'attribut 'withCredentials' sur l'objet ajax sur true et que mon serveur renvoyait true à l'en-tête Access-Control-Allow-Credentials. Ensuite, avec mon script, j'ai également passé le domaine afin qu'il puisse être retourné dans Access-Control-Allow-Origin sur mon script serveur. Le caractère générique * n'a pas fonctionné. Ceci est seulement testé dans Chrome jusqu'à présent.

Répondre

1

La plupart des navigateurs ne vous permettent pas d'effectuer un ajax interdomaine. Vous pouvez donc appeler un script local côté serveur qui effectue l'ajax interdomaine et renvoie la réponse à votre javascript. J'ai entendu parler de "proxy-script" et c'est la seule solution fiable que je connaisse.

step 1: javascript on otherdomain.com --GET--> server-side script on otherdomain.com 
step 2: server-side script on otherdomain.com --GET--> mywebsite.com/page?i=2&json 
step 3: mywebsite.com/page?i=2&json --JSON--> server-side script on otherdomain.com 
step 4: server-side script on otherdomain.com --JSON--> javascript on otherdomain.com 
+0

Je ne peux pas faire cela car otherdomain.com n'est pas mon domaine, il pourrait s'agir de n'importe quel domaine puisqu'il s'agit d'une extension. – fent

+0

- mais le navigateur en question fait, ou il ne serait pas donner cette erreur. – Quentin

+0

le navigateur fait quoi? – fent