Pourquoi ne puis-je pas charger une ressource externe à partir de la méthode de chargement jQuery?
Dans le processus d'apprentissage des requêtes Ajax à l'aide de jQuery, j'ai essayé de charger google d'une page d'accueil cliquez sur un lien. J'ai donc écrit quelque chose comme:
$("#ajax").click (function (event) {
$("#g").html("Loading...");
$("#g").load("http://www.google.com");
event.preventDefault ();
});
Et quelque part dans le corps:
<a id="ajax" href="http://www.google.com">Load file ajax way</a>
<div id="g">Click the above link to load the page...</div>
Qui n'a pas fonctionné et j'ai d'abord pensé il y a quelques erreurs de syntaxe ou de quelque chose. Mais plus tard, quand j'ai remplacé l'url de google avec un statique fichier html sur le serveur, il a fonctionné correctement.
$("#g").load("Temp.htm");
Est-il conçu pour fonctionner comme ceci (si oui, pourquoi?) ou suis-je en train de faire quelque chose de mal?
EDIT: Svp quelqu'un peut-il expliquer (ou reportez-vous) le problème de sécurité introduits par des croix domaine des appels ajax? En d'autres termes, pourquoi il est sûr d'ouvrir un autre onglet du navigateur et ouvrez google, mais PAS de l'intérieur de la page? Est-ce pour protéger de l'appelant ou de l'appelé?
source d'informationauteur Hemant
Vous devez vous connecter pour publier un commentaire.
Jquery utilise ajax (XMLHttpRequest) demande de charger les données, mais le navigateur le permet pour les ressources sur le même domaine. (Les réponses ci-dessus mentionner le Même la politique de l'origine). C'est pourquoi il travaille avec Temp.htm mais pas http://www.google.com.
Un moyen de contourner cela est de créer un script serveur qui va charger la page pour vous - en fait un proxy. Vous pouvez ensuite appeler
L'autre solution est d'utiliser des iframes pour la communication, j'ai trouvé cette bibliothèque, qui semble être ce dont vous avez besoin: jquery-crossframe
Une troisième option est JSONP mais cela ne fonctionnerait pas votre cas.
Mon avis - aller pour la première option avec un serveur proxy.
Pourquoi il y a une même origine?
Imaginez que vous êtes à la vérification de certains trucs sur votre compte ebay. Puis dans un autre onglet vous ouvrir mon site, où j'ai un script qui fait une série de demandes d'ebay (vous êtes toujours connecté) et les offres que vous pour une Audi A8, sans que vous vous en aperceviez. Ennuyeux... Si c'était votre banque, elle peut voler directement de l'argent de vous.
L'ironie est que, malgré la même origine, l'attaque ci-dessus est encore possible.
Vous n'êtes pas autorisé à faire de la croix-domaine des appels AJAX pour des raisons de sécurité - voir Même La Politique De L'Origine.
C'est pour des raisons de sécurité. Vous pouvez lire tout le long avec une solution de plus à yahoo.
Il est intéressant de noter que vous n'êtes pas entièrement exclue de requêtes inter-domaine en javascript.
De jQuery 1.2, vous pouvez charger les données JSON situé sur un autre domaine, si vous spécifiez un JSON-P de rappel et l'URL que vous appelez prend en charge JSON-P output.
L'exemple suivant est directement à partir de l'jQuery docs. Il s'empare de la dernière quatre flickr photos tagged avec "chat".
Vous pouvez lire la documentation ici: http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback
Personnellement je l'utilise pour tirer dans mes derniers tweets sur mon blog sans avoir à l'intégrer dans mon code côté serveur. Qui a aussi l'avantage de ne pas avoir à écrire le code de gestion d'erreur pour la souvent ponctuel de service API de Twitter. Juste l'affichage de la source sur mon blog si tu veux voir: http://joreteg.com
Tout d'abord, je dois supposer que vous avez une très bonne raison de faire quelque chose d'un lien fait par défaut avec JavaScript...
La raison principale est probablement de sécurité: Vous ne pouvez PAS accéder à toutes les données à l'extérieur du domaine actuel de JavaScript.
essayez d'ajouter
dans le htaccess.envoyer des paramètres à l'aide de
cela va envoyer une requête post.il a travaillé pour moi