2010-12-08 19 views
0

J'essaie d'écrire un utilitaire dans mon système de blog comme un message. Les limitations sont que je ne peux pas exécuter de code côté serveur. Je ne peux exécuter que du code côté client (JavaScript). Je voudrais envoyer une requête à un domaine externe et analyser ce résultat.Comment obtenir une requête Ajax à partir d'un serveur externe en utilisant JavaScript côté client

Par exemple, basé sur la façon dont les gens utilisent mon utilité, je voudrais être en mesure d'obtenir le code HTML d'une page telle que http://example.com/getPage.html?page=A, ce qui pourrait contenir:

<html> 
... 
<body> 
... 
    <table id="targetTable"> 
    <tr><td>Some Data</td></tr> 
    <tr><td>Some Data</td></tr> 
    <tr><td>Some Data</td></tr> 
    </table> 

... que je stockerait dans une chaîne JavaScript, puis interroger pour trouver les données que je veux.

Je souhaite interroger cette page à partir d'un domaine externe (c'est-à-dire que mon script ne s'exécute pas sur http://example.com et que je ne suis pas affilié à http://example.com) en utilisant le code côté client uniquement. J'utilise jQuery et it says que la méthode jQuery.get() ne fonctionnerait pas en raison de same origin policy. Y a-t-il un moyen de faire ce que je veux d'une autre manière? Par exemple, charger un iframe puis lire sa propriété html en quelque sorte?

Répondre

0

J'ai bien peur que ce soit impossible. Vous pouvez contourner ce problème en utilisant une convention appelée jsonp, mais elle ne pourra récupérer que des objets json (même si ceux-ci peuvent bien sûr contenir des chaînes html). Mais un serveur ne peut répondre à une requête jsonp que s'il en a un support intégré.

La solution de contournement la plus simple pour votre problème serait de créer un serveur minuscule qui obtient des pages html et renvoie json-data. Ensuite, vous pouvez envoyer vos appels ajax à ce serveur (comme ceci: http://www.yourserver.com/?page_to_get=http%3A%2F%2Fwww.example.com%2FgetPage.html%3Fpage%3DA), laissez-le récupérer des données de example.com et le renvoyer à votre script côté client comme json.

Juste pour renforcer mon argumentation, un morceau cité page AJAX jQuery:

En raison des restrictions de sécurité du navigateur, la plupart des demandes « Ajax » sont soumis à la même politique d'origine; la demande ne peut pas récupérer les données à partir d'un domaine différent, d'un sous-domaine ou du protocole .

Les requêtes Script et JSONP ne sont pas soumises aux mêmes restrictions de politique .

1

Vous voudrez peut-être jeter un oeil à JSONP et le plus récent CORS. L'utilisation de ces technologies ne garantit toujours pas que vous serez en mesure de faire ce que vous voulez en utilisant uniquement Javascript et aucun code côté serveur ...

0

Vous pouvez charger un iframe depuis un autre domaine ou passer des appels POST vers un autre domaine.

Heureusement pour notre sécurité mais malheureusement pour votre problème, vous ne pouvez rien lire avec Javascript en raison de la politique de même origine.

Si vous ne pouvez pas obtenir de coopération de l'autre domaine. Par exemple: avec JSONP activé ou un window.postMessage alors la seule solution que vous avez est d'utiliser un serveur web comme proxy.
Le serveur qui délivre votre page ou une instance gratuite (si votre trafic n'est pas énorme) comme Google App Engine, où vous avez une main sur.

Vous appelez ce serveur en AJAX, JSONP ou un iframe + window.postMessage avec un service générique qui récupérera le contenu de la page et le livrera au navigateur.