2010-08-09 4 views
1

Bit d'un débutant JavaScript ici -erreur JavaScript lorsque vous essayez de simple feu XMLHttpRequest (GET)

Je tirais ce bit de base du code JavaScript de mon site web comme un test:

var req = new XMLHttpRequest(); 
req.open('GET', 'http://www.google.co.uk/', false); 
req.send(); 
if (req.status == 200) { 
    alert(req.responseText); 
} 

et je continuer à obtenir l'erreur suivante:

[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://localhost/testEx3/Default.aspx :: SendRequest :: line 402" data: no]

Est-ce que quelqu'un sait ce que je fais mal ici?

MISE À JOUR:

OK - donc ce que je actaully essaie de faire est une requête POST à ​​un service web, je publiais sur ma machine dev locale - je recevais la même erreur que ci-dessus - c'est pourquoi Je mets cet exemple pour la simplicité. Il semble maintenant que la "politique de même origine" est entrée en jeu - alors maintenant j'ai publié le service web avec la partie début de l'URI comme http://localhost/ au lieu de http://tempuri.org/.

Maintenant, j'obtiens une erreur 500. Y a-t-il quelque chose qui me manque dans les en-têtes?

var request = new XMLHttpRequest(); 
request.open("POST", "http://localhost/ApplicationServices.asmx?op=AddressSearch", false, "", ""); 
request.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 

request.send(x, y, buffer); 

if (request.status == 200) { 
    alert("Success"); 
} 
else { 
    alert("Failure: " + request.status); 
} 
+0

Suppression de la balise d'origine identique car elle n'est plus en cours de lecture. – ajm

Répondre

1

À moins que vous ne travailliez pour Google, cela ne fonctionnera pas. Vous ne pouvez pas extraire d'informations d'un autre domaine via XMLHttpRequest. C'est ce qu'on appelle la "même politique d'origine".

modifier — Si vous obtenez une erreur 500 de votre serveur local, cela signifie que votre requête HTTP fait sur le serveur et le code dans le serveur échoue. Vérifiez les journaux de votre serveur.

+0

OK - Eh bien, en fait, je suis vraiment essayer de faire une demande POST à ​​un Im Web Service hébergement local - et il donne toujours la même erreur. Je pensais juste que je mettrais l'URL google juste pour rendre ma question plus facile à comprendre - je n'avais aucune idée de cette "même politique". Sûrement, il ne peut pas être si difficile d'accéder à votre propre service web. – Vidar

+0

OK voir ma modification. – Pointy

4

Il semble que vous essayez d'envoyer une requête qui violerait le same origin policy. Fondamentalement, en termes de requêtes AJAX, vous êtes limité à l'envoi de requêtes au même domaine que la page qui envoie cette requête. Par exemple:

Vous essayez de faire # 3 ci-dessus.

Si vous devez envoyer une requête interdomaine, vous pouvez utiliser JSONP ou quelque chose comme flensend/flxhr.

+0

J'ai l'impression que c'est trop lourd pour moi - comme tout ce que j'essaie de faire est une simple requête POST à ​​un service web que j'ai publié sur ma machine locale. Y a-t-il un moyen plus facile? BTW - Je reçois toujours la même erreur avec la demande POST. – Vidar

Questions connexes