J'essaye de charger une page HTML inter-domaines en utilisant AJAX mais à moins que le dataType soit "jsonp" je ne peux pas obtenir de réponse. Cependant, en utilisant jsonp, le navigateur attend un type de script mime mais reçoit "text / html".
Mon code pour la demande est:
$.ajax({
type: "GET",
url: "http://saskatchewan.univ-ubs.fr:8080/SASStoredProcess/do?_username=DARTIES3-2012&_password=P@ssw0rd&_program=%2FUtilisateurs%2FDARTIES3-2012%2FMon+dossier%2Fanalyse_dc&annee=2012&ind=V&_action=execute",
dataType: "jsonp",
}).success( function( data ) {
$( 'div.ajax-field' ).html( data );
});
Existe-t-il un moyen d'éviter d'utiliser jsonp pour la requête? J'ai déjà essayé d'utiliser le paramètre crossDomain mais cela n'a pas fonctionné.
Sinon, y a-t-il un moyen de recevoir le contenu html dans jsonp? Actuellement, la console dit "inattendu <" dans la réponse jsonp.
javascript
jquery
ajax
cross-domain
xonorage
la source
la source
Réponses:
Notes jQuery Ajax
Il y a des façons de surmonter la interdomaine barrière:
Il existe des plugins qui aident avec les requêtes inter-domaines :
La tête haute!
La meilleure façon de surmonter ce problème est de créer votre propre proxy dans le back-end, de sorte que votre proxy pointe vers les services dans d'autres domaines, car dans le back-end n'existe pas la même restriction de politique d'origine . Mais si vous ne pouvez pas faire cela dans le back-end, faites attention aux conseils suivants.
Avertissement!
L'utilisation de proxys tiers n'est pas une pratique sécurisée, car ils peuvent garder une trace de vos données, afin qu'elles puissent être utilisées avec des informations publiques, mais jamais avec des données privées.
Les exemples de code ci-dessous utilisent jQuery.get () et jQuery.getJSON () , les deux sont des méthodes abrégées de jQuery.ajax ()
CORS n'importe où
CORS Anywhere est un proxy node.js qui ajoute des en-têtes CORS à la requête mandatée.
Pour utiliser l'API, préfixez simplement l'URL avec l'URL de l'API. (Prend en charge https : voir le référentiel github )
Si vous souhaitez activer automatiquement les requêtes inter-domaines en cas de besoin, utilisez l'extrait de code suivant:
Quelle que soit l'origine
Quelle que soit l'origine est un accès jsonp interdomaine . Ceci est une alternative open source à anyorigin.com .
Pour récupérer les données de google.com, vous pouvez utiliser cet extrait:
Proxy CORS
CORS Proxy est un simple proxy node.js pour activer la requête CORS pour n'importe quel site Web. Il permet au code javascript sur votre site d'accéder à des ressources sur d'autres domaines qui seraient normalement bloqués en raison de la politique de même origine.
Comment ça marche? CORS Proxy tire parti du partage de ressources cross-origin, qui est une fonctionnalité qui a été ajoutée avec HTML 5. Les serveurs peuvent spécifier qu'ils souhaitent que les navigateurs autorisent d'autres sites Web à demander les ressources qu'ils hébergent. CORS Proxy est simplement un proxy HTTP qui ajoute un en-tête aux réponses disant "n'importe qui peut demander ceci".
C'est une autre façon d'atteindre l'objectif (voir www.corsproxy.com ). Tout ce que vous avez à faire est de déshabiller http: // et www. à partir de l'URL faisant l'objet d'un proxy, et ajoutez l'URL avec
www.corsproxy.com/
Navigateur proxy CORS
Récemment, j'ai trouvé celui-ci, il implique divers utilitaires de partage à distance Cross Origin orientés sécurité. Mais c'est une boîte noire avec Flash comme backend.
Vous pouvez le voir en action ici: Navigateur proxy CORS
Obtenez le code source sur GitHub: koto / cors-proxy-browser
la source
$.ajaxPrefilter
et cela a très bien fonctionné. Merci beaucoup!Vous pouvez utiliser Ajax-cross-origin un plugin jQuery. Avec ce plugin, vous utilisez
jQuery.ajax()
cross domain. Il utilise les services de Google pour y parvenir:C'est très simple à utiliser:
Vous pouvez en savoir plus ici: http://www.ajax-cross-origin.com/
la source
crossOrigin
option de jQuery ne fait certainement rien pour atténuer les politiques de même origine. Je supprimerais cette réponse si je pouvaisSi le site externe ne prend pas en charge JSONP ou CORS, votre seule option est d'utiliser un proxy.
Créez un script sur votre serveur qui demande ce contenu, puis utilisez jQuery ajax pour lancer le script sur votre serveur.
la source
Mettez simplement ceci dans l'en-tête de votre page PHP et cela ne fonctionnera pas sans API:
ou
ou
la source
$_SERVER['HTTP_ORIGIN']
vient. Je n'ai pas pu le trouver dans la documentation PHP ou ailleurs.Je poste ceci au cas où quelqu'un serait confronté au même problème que celui auquel je suis confronté actuellement. J'ai une imprimante thermique Zebra, équipée du serveur d'impression ZebraNet, qui offre une interface utilisateur basée sur HTML pour modifier plusieurs paramètres, voir l'état actuel de l'imprimante, etc. J'ai besoin d'obtenir l'état de l'imprimante, qui est affiché dans l'une de ces pages html, proposées par le serveur ZebraNet et, par exemple, alert () un message à l'utilisateur dans le navigateur. Cela signifie que je dois d'abord obtenir cette page html en Javascript. Bien que l'imprimante se trouve dans le réseau local du PC de l'utilisateur, cette même politique d'originereste fermement sur mon chemin. J'ai essayé JSONP, mais le serveur renvoie html et je n'ai pas trouvé de moyen de modifier ses fonctionnalités (si je pouvais, j'aurais déjà défini l'en-tête magique Access-control-allow-origin: *). J'ai donc décidé d'écrire une petite application console en C #. Il doit être exécuté en tant qu'administrateur pour fonctionner correctement, sinon il trolls: D une exception. Voici un code:
Tout ce que l'utilisateur doit faire est d'exécuter cette application de console en tant qu'administrateur. Je sais que c'est trop ... frustrant et compliqué, mais c'est en quelque sorte une solution de contournement au problème de politique de domaine au cas où vous ne pourriez pas modifier le serveur de quelque manière que ce soit.
edit: depuis js je fais un simple appel ajax:
Le html de la page demandée est retourné et stocké dans la variable de données .
la source
Pour obtenir le site externe du formulaire de données en utilisant un proxy local comme suggéré par jherax, vous pouvez créer une page php qui récupère le contenu pour vous à partir de l'url externe respective et ensuite envoyer une demande d'obtention à cette page php.
en tant que proxy php, vous pouvez utiliser https://github.com/cowboy/php-simple-proxy
la source
Votre
URL
ne fonctionne pas ces jours-ci, mais votre code peut être mis à jour avec cette solution fonctionnelle:la source
Vous avez besoin d'un proxy CORS qui transmet par proxy votre demande de votre navigateur au service demandé avec les en- têtes CORS appropriés . La liste de ces services se trouve dans l'extrait de code ci-dessous. Vous pouvez également exécuter l'extrait de code fourni pour voir le ping vers ces services à partir de votre emplacement.
la source
Deviner. Utilisé ceci à la place.
la source