Utilisez JSONP pour charger une page html

J'essaie de charger une page externe en utilisant JSONP, mais la page est une page HTML, je veux juste en saisir le contenu en utilisant ajax.

EDIT: la raison pour laquelle je fais cela est parce que je veux passer toutes les informations utilisateur ex: headers, ip, agent, lors du chargement de la page plutôt que de mes serveurs.

Est-ce faisable? En ce moment, je peux obtenir la page, mais jsonp tente d'analyser le json, renvoyant une erreur: Uncaught SyntaxError: Unexpected token <

Exemple de code:

$.post('http://example.com',function(data){
    $('.results').html(data);
},'jsonp');

J'ai mis en place un jsfiddle pour les personnes à tester avec: http://jsfiddle.net/8A63A/1/

22
demandé sur Korvin Szanto 2011-09-23 20:05:18

6 réponses

Http://en.wikipedia.org/wiki/JSONP#Script_element_injection

Effectuer un appel JSONP (en d'autres termes, pour utiliser ce modèle d'utilisation), nécessite un élément de script. Par conséquent, pour chaque nouvelle requête JSONP, le navigateur doit ajouter (ou réutilisation) un nouvel élément, en d'autres termes, injectez l'élément-dans le DOM HTML, avec la valeur désirée pour le attribut "src". Cet élément est ensuite évalué, l'URL src est récupéré, et la réponse JSON est évaluer.

Maintenant, regardez votre erreur:

SyntaxError non intercepté: jeton inattendu

< est le premier caractère de toute balise html, probablement, c'est le début de <DOCTYPE, dans ce cas, qui est, bien sûr, , invalide JavaScript.

Et Non , Vous ne pouvez pas utiliser JSONP pour récupérer des données html.

14
répondu c69 2011-09-23 16:55:25

J'ai fait ce que vous voulez mais dans mon cas, j'ai le contrôle du code côté serveur qui renvoie le code HTML. Donc, ce que j'ai fait a été enveloppé le code HTML dans l'une des propriétés Json de l'objet retourné et l'a utilisé côté client, quelque chose comme:

callback({"page": "<html>...</html>"})

L'erreur de syntaxe que vous rencontrez est parce que la bibliothèque que vous utilisez attend json mais la réponse est HTML, juste cela.

12
répondu martosoler 2012-04-29 00:19:52

J'ai trois mots pour vous: Même Origine

À moins que l'URL distante ne prenne en charge les requêtes JSONP appropriées, vous ne pourrez pas faire ce que vous essayez de faire. Et c'est une bonne chose.

Edit: vous pouvez bien sûr essayer de proxy la requête via votre serveur ...

2
répondu vzwick 2011-09-23 16:09:58

Si vous voulez vraiment juste employer le client pour accrocher un fichier HTML, je suggère d'utiliser flyJSONP-qui utilise YQL.. ou utilisez jankyPOST qui utilise des techniques douces:

JankyPOST crée un iframe caché et le fourre avec un formulaire (iframe[0]. contentWindow.document.body.form.name).

Ensuite, il utilise HTML5 (regardez les navigateurs hérités!) API webMessaging à poster à l'autre iframe et définit les vals des éléments de formulaire d'iframe à ce que vous avez spécifié.

Soumet le formulaire à distance serveur...faire.

Ou vous pouvez simplement utiliser PHP curl, l'analyser, l'echo, donc sur.

IDK si exactement ur l'utiliser pour mais j'espère que cela aide.

Aussi... Je suis à peu près sûr que vous pouvez JSONP tout ce qui est une sortie du code du serveur. Je l'ai fait avec ClientLogin en JSONPing simplement leur page keyGen et consolelogged avec succès le texte même s'il s'agissait de balises b/w. J'ai eu d'autres erreurs à ce sujet, mais le point est que j'ai gratté cette sortie.

Actuellement, j'essaie de faire quoi vous êtes donc je vais poster en cas de succès.

2
répondu Cody 2012-06-30 07:26:48

Je ne pense pas que ce soit possible. JSONP exige que la réponse soit rendue correctement.

Si vous voulez une autre solution, qu'en est-il de charger l'url dans un iframe et d'essayer de parler à travers l'iframe. Je ne suis pas 100% positif, cela fonctionnera, mais ça vaut le coup.

0
répondu jesse reiss 2011-09-23 16:14:12

Tout d'abord, appelez l'URL AJAX manuellement et voir le HTML résultant a du sens.

Deuxièmement, vous devez fermer votre DIV dans votre exemple de violon.

-2
répondu Diodeus - James MacFarlane 2011-09-23 16:07:12