2010-10-13 2 views
2

Je souhaite utiliser JavaScript pour créer un http simple. J'ai utilisé jQuery pour effectuer ma requête. Mon code fonctionne sur IE8.0 mais pas sur Chrome (ver 6.0). Ma page a le code suivant: (pour simplifier, je l'ai fait une simple demande à une page html, mais mes besoins est autre)

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
    <html> 
     <script type"text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <SCRIPT TYPE="text/javascript" > 

    function sendGet(){ 
     $.get(
      "http://www.google.pt", 
      function(data) { 
       alert('page content: ' + data); 
     }); 
    } 
    </SCRIPT> 
    <head> 
     <title> Http Get Demonstration </title> 
    </head> 
    <body> 
     <p/> 
     <input type="button" value="Http Get" onclick="sendGet();" /> 
    </body> 
    </html> 

Comme je l'ai dit, lorsque je charge cette page sur IE et appuyez sur le bouton , je reçois l'alerte avec le code HTML. Mais dans Chrome, l'alerte apparaît avec du texte vide (null?). Dans Console Chrome à partir de "Outils de développement", je reçois le message suivant: "XMLHttpRequest ne peut pas charger http://www.google.pt/.La valeur null d'origine n'est pas autorisée par Access-Control-Allow-Origin."

Tout le monde peut me expliquer quel est le sens de ce message? Et ce que je devrais changer à ma page fonctionne dans Chrome?

Merci

+0

ce que vous obtenir de google.pt. essayez d'utiliser votre propre page html ou php. Chrome provient de la famille Google. il ne peut pas charger google lui-même. :) – zod

+0

J'ai essayé avec d'autres pages. (même certains hébergés dans localhost) Le problème ne doit pas avoir avec la page source. –

Répondre

8

En raison de same origin policy vous ne pouvez pas envoyer des requêtes AJAX à différents domaines que celui qui héberge votre page. Donc, à moins que votre page ne soit hébergée sur http://google.pt, vous ne pouvez pas envoyer une requête AJAX à ce domaine. Une solution de contournement possible consiste à installer un script côté serveur sur votre domaine qui servira de pont entre google.pt et le client ou utiliser JSONP si le domaine distant le prend en charge.

+0

Pourquoi ça marche sur IE alors? –

+0

Je pense (mais je ne suis pas sûr) que vous pouvez remplacer la politique de sécurité dans vos paramètres IE pour permettre les demandes inter-domaines. Ce ne sont pas les paramètres par défaut mais que la plupart des utilisateurs ont et certainement pas quelque chose sur lequel vous pouvez compter. Le même code a échoué lorsque je l'ai exécuté sur mon IE8 avec les paramètres par défaut. J'ai mis un test [jsfiddle] (http://www.jsfiddle.net/nMsCE/). Chrome et FireFox affichent l'alerte mais avec des données vides, IE échoue avec un accès refusé. –

+2

+1 Certains navigateurs permettent cela * si * la page envoyant la requête est hébergée depuis le système de fichiers ou peut-être localhost. Firefox et Chrome sont plus strictes par défaut. – user113716

0

Vous ouvrez le fichier HTML directement à partir d'un fichier (par exemple le fichier ne disent barre d'adresse: // usr/chemin/vers/le/fichier)?

Nous avons trouvé le chrome ne vous laissera pas « ajax » dans les fichiers d'autres domaines lors de l'exécution sous file: //. Cependant, dans Safari, cela fonctionne bien.
La meilleure solution pour nous est d'utiliser quelque chose comme MAMP pour exécuter un serveur Apache local.

1

Bien que je ne me souviens pas si je l'ai changé toute option IE, le Darin Dimitrov semble expliquer mon problème.

J'ai trouvé quelques astuces peuvent être utilisées (au-delà de la réponse Dimitrov):