6
votes

Demandes de domaine croisées avec jQuery

Pour un projet, j'ai besoin d'obtenir le code source de la page Web de différents autres domaines. J'ai essayé le code suivant: xxx

toujours je ne reçois aucun résultat mais juste une boîte d'alerte vierge.


1 commentaires

Voici un lien vers une question similaire avec quelques bonnes suggestions (une par moi) Stackoverflow.com/questions/7614420/...


6 Réponses :


4
votes

Pour des raisons de sécurité Les scripts ne sont pas en mesure d'accéder au contenu d'autres domaines. Mozilla a un long article sur Contrôle d'accès HTTP , mais la ligne finale est que sans le site Web ajout. Prise en charge des demandes croisées, vous êtes vissé.


0 commentaires

11
votes

Par défaut, tous les navigateurs restreignent les demandes inter-domaines, vous pouvez en contourner YQL comme proxy. Voir un guide ici: http: // ajaxian. Com / Archives / Utilisation-YQL-AS-A-A-A-Proxy-for-Domain-Ajax


1 commentaires

James Padolsey possède également un petit JQUERY Plugin qui utilise YQL, si cela facilitera les choses: )



4
votes

Ce code fonctionne parfaitement à l'aide de JQuery et YQL

$(document).ready(function(){
  var container = $('#target');
  $('.ajaxtrigger').click(function(){
    doAjax($(this).attr('href'));
    return false;
  });
  function doAjax(url){
    if(url.match('^http')){
      $.getJSON("http://query.yahooapis.com/v1/public/yql?"+
                "q=select%20*%20from%20html%20where%20url%3D%22"+
                encodeURIComponent("http://www.yahoo.com")+
                "%22&format=xml'&callback=?",
        function(data){
          if(data.results[0]){
            var data = filterData(data.results[0]);
            container.html(data);

          } else {
            var errormsg = '<p>Error: could not load the page.</p>';
            container.html(errormsg);
          }
        }
      );
    } else {
      $('#target').load(url);
    }
  }
  function filterData(data){
    data = data.replace(/<?\/body[^>]*>/g,'');
    data = data.replace(/[\r|\n]+/g,'');
    data = data.replace(/<--[\S\s]*?-->/g,'');
    data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
    data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
    data = data.replace(/<script.*\/>/,'');
    return data;
  }
});


2 commentaires

Ne pouvons-nous pas créer quelque chose comme cette fonctionnalité en JavaScript. Je le demande parce que dans l'avenir si Yahooapi restreint cette fonctionnalité, que se passera-t-il?


@Nits Cochez cette page .. FRIHOST.com/forums/vt-32602.htmlled/a > Je n'ai pas essayé ça. BTW Ne pensez-vous pas que l'utilisation de jQuery est la méthode la plus facile. :)



-1
votes

a trouvé une solution de plus pour cela: xxx

C'est vraiment un moyen assez plus facile de gérer les demandes de domaine croisé. Comme certains des sites comme www.imdb.com rejette les demandes de YQL.


2 commentaires

Je ne le pense pas. Cela ne fait aucune différence dans la même politique d'origine. Cela ne fonctionnera pas. La documentation de JQuery lui-même dit: "En raison des restrictions de sécurité du navigateur, la plupart des demandes" Ajax "sont soumises à la même politique d'origine; la demande ne peut pas récupérer avec succès les données d'un domaine, d'un sous-domaine ou d'un protocole différent." Je ne comprends pas pourquoi vous acceptez cette mauvaise réponse de vous-même ...


Cela ne fonctionne que parce que la requête n'était pas croisée en premier lieu, ce n'est donc pas une réponse valide à la question.



1
votes

La solution pour votre cas est JSON avec PADDING ou JSONP.

Vous aurez besoin d'un élément HTML spécifié pour son attribut SRC une URL qui renvoie JSON comme ceci: xxx

Vous pouvez rechercher en ligne pour Une explication plus approfondie, mais JSONP est définitivement votre solution pour cela.


0 commentaires

0
votes

Faites les étapes suivantes. 1: Ajouter un type de données: JSONP au script. 2: Ajouter un paramètre "rappel" à l'URL 3: Créez une fonction JavaScript avec le nom identique à la valeur paramétrice "Rappel". 4: La sortie peut être reçue à l'intérieur de la fonction JavaScript.


0 commentaires