2008-09-09 7 views

Répondre

20

Si vous utilisez jQuery, il a une fonction de rappel pour surmonter ceci:

http://docs.jquery.com/Ajax/jQuery.ajax#options

À partir de jQuery 1.2, vous pouvez charger JSON données situées sur un autre domaine si vous spécifiez une Callback JSONP, qui peut être fait comme ceci: "myurl? Callback =?". jQuery remplace automatiquement le? avec le nom correct de la méthode à appeler, en appelant votre rappel spécifié. Ou, si vous définissez le dataType à "jsonp" un rappel sera automatiquement ajouté à votre demande Ajax.

Sinon, vous pouvez faire votre demande ajax à un script côté serveur qui effectue l'appel inter-domaine pour vous, puis transmet les données à votre script

+0

fonctionne uniquement pour json, et si vous avez besoin de xml? –

+0

Eh bien c'est quand vous devez utiliser la deuxième option de faire l'appel de domaine croisé dans un script côté serveur qui passe le xml –

+0

Je travaille sur JSON, en ajoutant & callback =? encore recevoir la même erreur – Miroo

0

Quelques détails serait bien: qui AJAX bibliothèque utilisez-vous, qu'est-ce que vous aimeriez réaliser, comment vous le faites. Par exemple, il peut s'agir d'une requête Ajax entre domaines, ce qui n'est pas autorisé. Dans ce cas, utilisez JSON.

+0

Désolé, j'ai eu cette erreur en utilisant JQuery $ .ajax sur FireFox 3. Je ai essayé la suggestion jsonp mais je pense que cela ne fonctionnera qu'avec quelque chose qui servira json. J'essaye de créer un exemple de mashup basé sur un fichier html local qui va extraire des données de Yahoo! Finance, mais qui sert le .csv, donc je pense que je suis SOL. –

+1

La "magie" qui le fait fonctionner est la partie "P" (padding) du JSONP, pas le JSON en soi. Avec un service fixe (comme Yahoo, vous n'avez probablement pas de chance), car ils ne changeront pas leur service pour le rendre disponible pour appeler de cette manière. – jeffreypriebe

0

Je suis récemment tombé sur ce problème et c'était pendant que AJAX chargeait la requête locale, pas de problème de script intersite. En outre, Jimmy lui-même semble avoir le même problème. Cela semble être le problème de sécurité FF, cet article décrit le cause and the solution to access to restricted uri denied" code: "1012 problem.

Désolé, cette erreur a obtenu l'aide de JQuery .ajax $ sur FireFox 3. Essayé jsonp suggestion, mais je pense que cela ne travail avec quelque chose qui servira jusqu'à JSON. J'essaye de créer un exemple de mashup basé sur le fichier html local qui va tirer des données de Yahoo! Finance, mais ils servent .csv, donc je pense que je suis SOL. - Jimmy Chandra (9 septembre à 17:20)

J'espère que vous le trouverez utile.

6

Pour mettre à jour la réponse (je suppose, surtout pour mon bénéfice quand je viens chercher cette réponse plus tard), si vous chargez du XML ou autre chose, vous pouvez toujours demander à l'utilisateur s'il peut nous lire site avec ce code:

try { 
    if (netscape.security.PrivilegeManager.enablePrivilege) 
     netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
} catch (e) { 
    alert("Sorry, browser security settings won't let this program run."); 
    return; 
} 

(du livre de services Web RESTful) Mais, cela ne fonctionne que dans Firefox, lorsque le fichier HTML est chargé à partir du fichier local. Donc, pas si utile.

1

Encore une solution: si tout ce dont vous avez besoin est les en-têtes, vous pouvez spécifier "HEAD" comme méthode et cela ne déclenchera pas le problème de sécurité. Par exemple, si vous voulez juste savoir si la page Web existe.

var client = new XMLHttpRequest(); 
client.open("HEAD", my_url, false); 
client.send(null); 
if(client.readyState != 4 || client.status != 200) //if we failed 
    alert("can't open web page"); 
Questions connexes