Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur avec XMLHttpRequest

testé avec plusieurs navigateurs

    11 août 2011 à 16:43:33

    Salut à tous :)

    Comme vous vous en doutez : j'ai un problème :lol:

    J'essaie de faire en sorte qu'une page html ( en local sur ma machine ) se connecte à un site en faisant un requête $_POST qui fournit des paramètre d'authentification.

    De façon à ce que ça se connecte automatiquement, et me renvoie la page qui suit. (J'espère que je suis clair)

    Or j'ai beau essayer, chercher, vérifier, tester, ....
    Je n'y arrive pas :/

    Voici mon code : ( j'ai bien entendu enlever les paramètres d'authentification ( ID, login, )).

    function getXMLHttpRequest() {
    		var xhr = null;
    		
    		if (window.XMLHttpRequest || window.ActiveXObject) {
    			if (window.ActiveXObject) {
    				try {
    					xhr = new ActiveXObject("Msxml2.XMLHTTP");
    				} catch(e) {
    					xhr = new ActiveXObject("Microsoft.XMLHTTP");
    				}
    			} else {
    				xhr = new XMLHttpRequest(); 
    			}
    		} else {
    			alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    			return null;
    		}
    		
    		return xhr;
    	}
    	
    
      
    	var sVar1 = encodeURIComponent("Login");
    	var sVar2 = encodeURIComponent("MotDePasse");
    
    	var xhr = getXMLHttpRequest(); // Voyez la fonction getXMLHttpRequest() définie dans la partie précédente
    	
    	xhr.onreadystatechange = function() {
    
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    			alert("OK"); // C'est bon \o/
    			
    		}
    		
    	};
    	
    	xhr.open("POST", "https://4axes.net/login/identification", true);
    	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    	xhr.send("variable1="+sVar1+"&variable2="+sVar2);
    


    Comme certain s'en douterons, j'ai suivi le cours de Nesquik69 et Thunderseb : AJAX et l'échange de données en JavaScript

    Et malgré mes efforts, voici ce que j'obtient sur Chrome : XMLHttpRequest cannot load https://4axes.net/login/identification. Origin null is not allowed by Access-Control-Allow-Origin.

    et sur Firefox :
    POST https://4axes.net/login/identification 200 OK 544ms

    sous IE 8.0 :
    Rien ( sauf le alert('OK');

    Bref dans tout les cas après le : alert('OK'); : plus rien

    Le code s'exécute correctement mais la page que je demande n'est pas chargée.
    J'aimerai que quelqu'un m'explique mon erreur svp :)

    Merci beaucoup.
    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2011 à 0:01:28

      Tu y arrivera plus facilement avec jquery pour utiliser de l'ajax il suffit juste de d'appeler un truk du genre $.ajax(); !
      • Partager sur Facebook
      • Partager sur Twitter
      Un vrai maître est un éternel étudiant. Yi
        12 août 2011 à 3:44:51

        Si je ne me trompe pas tu essayes de faire de l'ajax cross-domain, la requête que tu envois ne pointe pas sur ton site non ?

        @TaCosS Il peux très bien l'utiliser sans jQuery. Vouloir utiliser jQuery pour tout et rien en même temps en parfois inutile...
        • Partager sur Facebook
        • Partager sur Twitter
        Mon Twitter : @Amatewasu
          12 août 2011 à 8:52:28

          @Amatewasu, Pourquoi la requête que j'envoie ne pointerais pas sur mon site ? Je pensais que c'était le cas, ça expliquerait le "Origin null is not allowed by Access-Control-Allow-Origin."
          • Partager sur Facebook
          • Partager sur Twitter
            12 août 2011 à 9:14:17

            Si elle pointe sur ton site, utilise un chemin relatif, sinon les requêtes ajax cross domain sont interdites par certains navigateurs :)
            • Partager sur Facebook
            • Partager sur Twitter
              12 août 2011 à 9:58:03

              Une chemin relatif plutôt que l'URL ? ça ressemble à quoi ? :/
              • Partager sur Facebook
              • Partager sur Twitter
                12 août 2011 à 9:58:49

                Si ton site est bien https://4axes.net tu utilise :

                xhr.open("POST", "/login/identification", true);
                • Partager sur Facebook
                • Partager sur Twitter
                  12 août 2011 à 10:28:25

                  mais dans ce cas, comment le javascript va savoir qu'il faut envoyer une requête demandant cette page s'il connait pas le nom du domaine ?????

                  Car ce que j'ai peut être oublier de préciser, c'est que le fichier javascript est exécuter en local sur ma machine? ^^"
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 août 2011 à 10:29:55

                    Donc c'est pas ton domaine x)

                    Et tu n'essaie pas de le faire sans serveur web ?

                    Le fait de faire une requête ajax sur un serveur externe est bloqué la plupart du temps
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 août 2011 à 10:52:07

                      Citation : Jack


                      Et tu n'essaie pas de le faire sans serveur web ?



                      Comment ça ?

                      Citation : Jack

                      Donc c'est pas ton domaine x)
                      Le fait de faire une requête ajax sur un serveur externe est bloqué la plupart du temps



                      Comment permettra ça ?
                      Si une requête AJAX n'est pas autoriser, un autre "type" de requête serait possible .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 août 2011 à 10:53:31

                        Tu as bien un serveur web d'installé ? wamp, lamp ? apache ?

                        Je ne sais pas si on peut le permettre, matte sur le net
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 août 2011 à 11:12:32

                          Pourquoi installer un serveur web ? je bosse sur du javascript (coté client), à quoi ce me servirait ? Le site sur lequel je ne me connecter n'est pas à moi !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 août 2011 à 11:16:54

                            Je ne (sais) pense pas que tu puisse faire un appel ajax sans serveur web.

                            Edit : ça peut servir : http://blog.pascal-martin.fr/post/Requ [...] -domain-proxy

                            Edit 2 : aussi : http://blog.pascal-martin.fr/post/Requ [...] balise-script
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 août 2011 à 11:40:26

                              ok merci, je vais aller voir ça :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 août 2011 à 12:45:20

                                Alors enfaîte pour des raisons de sécurité les navigateurs bloquent les requête ajax dites "cross-domain". Quand cela ne pointe pas vers ton site. Donc il suffit d'upload ton script sur ton serveur et de le charger via ton domaine pour que celui-ci fonctionne.

                                Cependant si tu tiens réellement à ce qu'il soit en local, l'ajax cross domain existe quand même mais il ne faut pas le même objet xhr et une validation côté serveur.
                                Si ça t'intéresse je t'invite à lire ce chapitre du tuto ajax : L'XMLHttpRequest cross-domain.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Mon Twitter : @Amatewasu
                                  12 août 2011 à 17:12:25

                                  Je l'ai déjà lu mais je ne comprend pas tout à ce propos :/
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 août 2011 à 17:23:47

                                    Ah oui ? Quelle est la partie dont tu ne comprend pas ?
                                    Il suffit de renvoyer un header HTTP via une fonction donnée dans le tuto ainsi qu'utiliser une autre objet.

                                    Sinon tu peux placer ton fichier qui lance la requête ajax sur ton domaine et le problème sera sûrement réglé.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Mon Twitter : @Amatewasu
                                      12 août 2011 à 18:07:50

                                      Citation : Amatewasu


                                      Il suffit de renvoyer un header HTTP via une fonction donnée dans le tuto ainsi qu'utiliser une autre objet.



                                      Je vais relire ça.

                                      Citation : Amatewasu


                                      Sinon tu peux placer ton fichier qui lance la requête ajax sur ton domaine et le problème sera sûrement réglé.



                                      Et ça c'est un autre truc que je ne sais pas faire xD


                                      Merci ^^ Je vais revoir ce tuto :)


                                      EDIT :

                                      Citation : Amatewasu


                                      Il suffit de renvoyer un header HTTP via une fonction donnée dans le tuto ainsi qu'utiliser une autre objet.



                                      ça il faut le faire côté serveur, je n'ai pas accès au code :/

                                      (ou alors je comprend plus rien XD )
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        12 août 2011 à 18:30:24

                                        Tu n'as pas accès au code ? Je croyais que c'était ton site.
                                        Dans ce cas là ce n'est pas possible.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Mon Twitter : @Amatewasu
                                          23 août 2011 à 12:03:24

                                          Salut, j'ai fini par résoudre mon problème et recevant la page qui suit l'authentification avec xhr.reponseText, et je l'inclue ensuite dans une div.

                                          Mais ce à quoi je n'avais pas penser, c'est que ce qui s'affiche ensuite, et du simple code html;
                                          Je veux dire que lorsque je clic sur les liens , ça ne me redirige pas avec le site :/

                                          Moi ce que je voulais c'était après l'exécution du script, est connecté sur le site comme si je l'avais fais manuellement.

                                          Quelqu'un saurait comment faire ? Je cherche mais je ne comprend pas comment faire :/
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            23 août 2011 à 13:02:08

                                            Je ne suis pas sur de comprendre l'intérêt de ce que tu veux faire.

                                            Si tu veux naviguer sur le site, pourquoi ne pas directement aller sur le site en question ?

                                            Dans tous les cas, tu devrais peut être regarder du côté des iframes si tu veux pouvoir y naviguer ...
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Erreur avec XMLHttpRequest

                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                            • Editeur
                                            • Markdown