AJAX et firefox j'arrive pas a envoyer une requete POST

AJAX et firefox j'arrive pas a envoyer une requete POST - HTML/CSS - Programmation

Marsh Posté le 28-04-2006 à 13:43:15    

Voilà je veut envoyé un flux XML vers un serveur (google en l'occurence),
 
Mon bout de code fonctionne correctement sur IE, mais pour Firefox et Opera ca ne marche pas !
 
Que faire !
 

Code :
  1. function launchCheck()
  2. {
  3.     text = document.getElementById("XtractText" ).innerHTML;
  4.     xmlReponseText = '<?xml version="1.0" encoding="utf-8"
  5. ?><spellrequest textalreadyclipped="0" ignoredups="0"
  6. ignoredigits="1" ignoreallcaps="1"><text>' + text +
  7. '</text></spellrequest>';
  8.     var req = null;
  9.         var req = getXMLSpellCheck(req);
  10.         var monURL = "http://www.google.com/tbproxy/spell?lang=fr";
  11.         alert(monURL);
  12.         req.open("POST", monURL, true);
  13.         req.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
  14.     req.send(xmlReponseText);
  15. }
  16. //on fait un simple alert du flux recus!
  17. function getXMLSpellCheck(parHTTP)
  18. {
  19.     if(window.XMLHttpRequest)
  20.     {
  21.         // Firefox et autres
  22.         parHTTP = new XMLHttpRequest();
  23.     }
  24.     else if(window.ActiveXObject)
  25.     {
  26.         // Internet Explorer
  27.         try
  28.         {
  29.             parHTTP = new ActiveXObject("Msxml2.XMLHTTP" );
  30.         }
  31.         catch (e)
  32.         {
  33.             parHTTP = new ActiveXObject("Microsoft.XMLHTTP" );
  34.         }
  35.     }
  36.     else
  37.     {
  38.         // XMLHttpRequest non supporté par le navigateur
  39.         alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  40.         window.history.back();
  41.         parHTTP = false;
  42.     }
  43.     parHTTP.onreadystatechange = function()
  44.     {
  45.         if(parHTTP.readyState == 4)
  46.         {
  47.             if(parHTTP.status == 200)
  48.             {
  49.                 alert(parHTTP.responseText);
  50.             }
  51.             else
  52.             {
  53.                 alert("Error: returned status code " + parHTTP.status + " " + parHTTP.statusText);
  54.             }
  55.         }
  56.         else if(parHTTP.readyState == 3)
  57.         {
  58.         }
  59.     };
  60.     return parHTTP;
  61. }

 


Comme vous pouvez le constater il n'y a rien de sorcier.
 
Mais Firefox me renvoie l'erreur suivante
 

Code :
  1. Erreur : uncaught exception: Permission refusée d'appeler la méthode XMLHttpRequest.open

 


Que faire ??

Reply

Marsh Posté le 28-04-2006 à 13:43:15   

Reply

Marsh Posté le 28-04-2006 à 13:57:05    

J'essay plein de truc mais le pire c'est que je sais que c'est possible à utiliser vu que ca marche sur des exemples du web !

Reply

Marsh Posté le 28-04-2006 à 14:00:25    

Euh je comprends pas trop 2/3 lignes:

Code :
  1. var req = null;
  2. var req = getXMLSpellCheck(req);


Donc ça, explication, plz?
Surtout que derrière tu fais

Code :
  1. function getXMLSpellCheck(parHTTP)
  2. {
  3.    if(window.XMLHttpRequest)
  4.    {
  5.        // Firefox et autres
  6.        parHTTP = new XMLHttpRequest();
  7.    }
  8.    ...
  9.    return parHTTP;
  10. }


normalement ça doit "quand même" marcher mais bon s'pas terrible terrible.
 
Pourquoi n'utilises tu pas une librairie de connexion kivabien?

Reply

Marsh Posté le 28-04-2006 à 14:03:31    

Cela te permet d'instancier l'objet req suivant le navigateur.
Je met ça sous forme de fonction c'est plus simple à utiliser c'es tout :)
Sinon c'est quoi tes librairies de connexion ?

Reply

Marsh Posté le 28-04-2006 à 14:17:43    

Aquarius_28 a écrit :

Cela te permet d'instancier l'objet req suivant le navigateur.


Nan pas la ...

Code :
  1. var req = null;


Tu définis(c'est à ça que sertvar) une variable "req" à laquelle tu attribues la valeur 'null'.

Code :
  1. var req = getXMLSpellCheck(req);


Tu redéfinis ta variable req en lui mettant la valeur de retour de la fonction getXMLSpellCheck qui prend comme arguement req ( qui vaut ici null)

Code :
  1. function getXMLSpellCheck( parHttp){
  2. ...
  3. parHttp = unTruc; //en fonction du navigateur
  4. ...
  5. return parHttp;
  6. }


Te retourne un object xmlHttpRequest, sauf que cet objet tu le mets dans le paramètre passé à la dite fonction.
Encore une fois ça doit marcher, mais ça ne traduit pas une très compréhension de ce que tu fais :o

Aquarius_28 a écrit :

Je met ça sous forme de fonction c'est plus simple à utiliser c'es tout :)


Nan pas la ...
 

Aquarius_28 a écrit :

Sinon c'est quoi tes librairies de connexion ?


Yahoo, très bien mais un peu complexe: http://developer.yahoo.com/yui/connection/index.html
XHConn, super simple: http://xkr.us/code/javascript/XHConn/


Message édité par anapajari le 28-04-2006 à 14:19:03
Reply

Marsh Posté le 28-04-2006 à 14:37:43    

Oki je regarde !
Mais là en fait je viens d'identifier le probleme, sous Firefox il n'accepte pas de lancer une requette que une adresse distante ...
Il marchera très bien sur une adresse local par contre ...

Reply

Marsh Posté le 28-04-2006 à 14:41:26    

Le passage des parametres en javascript, ce fait par valeur donc si ta fonction getXMLSpellCheck "tombe en marche" c'est uniquement parce que tu fais un return.
 
En fait tu n'a pas besoin de parametre à ta fonction :

Code :
  1. function getXMLSpellCheck(){
  2.   // variable locale
  3.   var parHttp;
  4.   ...
  5.   parHttp = unTruc; //en fonction du navigateur
  6.   ...
  7.   return parHttp;
  8. }


 

Reply

Marsh Posté le 28-04-2006 à 14:56:38    

Bon je viens d'utiliser la librairie XHConn mais pareil ca ne marche pas ...
Sous Opera :
[Error:name: Error message: Security violation]
 
sous Firefox :
Permission refusée d'appeler la méthode XMLHttpRequest.open  
 
Perso je pense que c'est du au fait que je veut interroger une url distante ... paske en utilisant comme url une url local host là ca marche.


Message édité par Aquarius_28 le 28-04-2006 à 14:56:59
Reply

Marsh Posté le 28-04-2006 à 16:28:17    

Bon pour résudre ça finalement j'ai fait un pseudo proxy ki vas chercher le flux xml distant et ki me le renvoi au client ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed