7
votes

Qu'est-ce que je manque dans le XMLHTTPQUEST?

Je suis complètement nouveau au monde JavaScript et Ajax, mais j'essaie d'apprendre.

En ce moment, je teste le XMLHTTPQUEST et je ne peux pas faire de travail même l'exemple le plus simple. C'est le code que j'essaie d'exécuter xxx

et je reçois toujours l'alerte avec le statut 0. J'ai lu des tonnes de webs à ce sujet et je ne le fais pas Sachez ce que je manque. J'apprécierai toute aide, merci!


0 commentaires

3 Réponses :


13
votes

Vous rencontrez dans le Même stratégie d'origine .

sauf si votre code est en cours d'exécution sur www.google.com (qui est peu probable), cela va à l'erreur. P>

aussi, et bien que cela ne vous cause pas de problème pour le moment, C'est une mauvaise pratique et peut conduire à des conditions de course, vous utilisez des globaux partout. p>

Faire la variable XHR locale à la fonction P>

if (this.readyState == 4 && this.status == 200){
// etc etc


0 commentaires

8
votes

Suivant de La réponse de David :

Vous devez utiliser un chemin relatif pour rester dans la même politique d'origine. Sinon, la plupart des navigateurs renvoient simplement un indemnérement vide et Status == 0 .

comme une solution de contournement possible, vous pouvez configurer un très simple inversé proxy (avec mod_proxy Si vous utilisez Apache). Cela vous permettrait d'utiliser des chemins relatifs dans votre demande AJAX, tandis que le serveur HTTP agirait de proxy à n'importe quel emplacement "à distance".

La directive sur la configuration fondamentale pour configurer un proxy inverse dans mod_proxy est le proxypass . Vous l'utiliseriez généralement comme suit: xxx

Dans ce cas, le navigateur demanderait / ajax / rechercher? Q = pile + débordement mais Le serveur servirait cela en agissant en tant que proxy à http://google.com/search?q=stack+overflow .


0 commentaires

2
votes

Outre le même problème de politique d'origine, votre alerte est dans un endroit illogique. Lorsque vous utilisez XMLHTTPQUESTREQUEST, la fonction attribuée à xhr.onreadystatechange sera appelée chaque fois que préredyStat changements. ReadyStat doit changer (en théorie) à partir de 0 (initialisé) à 1 (envoyé) à 2 (chargement) à 3 (interactif) à 4 (fini).

Qu'est-ce que votre code est cochez le ReadyStat et voyez si la demande est terminée ( si (xhr.readytstate == 4) ), et sinon, alerte le code d'état HTTP . Étant donné que la demande n'a pas encore été envoyée (ou vient d'être envoyée), il ne devrait pas y avoir de statut HTTP.

Idéalement, vous devez déplacer l'alerte à l'intérieur du bloc si bloque, il vous permet de savoir quand il se termine.


0 commentaires