Différence entre local et serveur [Résolu]

Messages postés
25
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
17 novembre 2009
- - Dernière réponse : cs_Erick007
Messages postés
25
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
17 novembre 2009
- 17 nov. 2009 à 19:51
Bonjour je ne suis pas sure de comprendre et j'aimerais une petite explication, j'ai écrit un petit script de quoi de très simple qui va chercher a l'aide de l'objet XMLHHTPRequest, un fichier xml sur un serveur pour pouvoir par la suite le traiter et l'afficher.

Le problème est que je ne comprend pas pourquoi ce script fonctionne lorsque je met cette page html/javascript sur le serveur et qu'il ne fonctionne pas en local. Pourtant en local il trouve bien la page car il me retourne pas un code 404 mais un code 0 (si je met une page bidon qui n'existe pas il me retourne 404...).

Voici mon code:

var objXHR = null;

function loadCharacter(txtVersion, txtCharacter) {
objXHR = createObjXHR();
if(objXHR) {
objXHR.open("GET", "http://maplerank.maplechiefs.com/xml/characterCheck-" + txtVersion + "-" + txtCharacter + ".xml", true);
objXHR.onreadystatechange = displayCharacter;
objXHR.send(null);
} else {
alert("Objet XML null");
}
}

function displayCharacter() {
if(objXHR.readyState == 4) {
if(objXHR.status 200 || objXHR.status 0) {
alert('ok');
alert(objXHR.responseText);
} else {
alert('erreur' + objXHR.statusText + objXHR.status);
}
}
}

function createObjXHR() {
if(window.XMLHttpRequest) return new XMLHttpRequest(); // Native Support
 
if(window.ActiveXObject) { // Microsoft
var names = ["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
for(var i in names) {
try {
return new ActiveXObject(names[i]);
} catch(e) {}
}
}
return null; // non supporté
}


Merci
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
3
Merci
et pourtant j'avais déjà fait !
Alzheimer me guette....
function ajax(url)
{	var queryAJAX;
try 		{	queryAJAX = new ActiveXObject("Microsoft.XMLHTTP");	}
catch(e)	{	queryAJAX = new XMLHttpRequest();	
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');	
}
queryAJAX.open('GET', url+'?'+new Date(), false);
queryAJAX.send(null);
alert(queryAJAX.responseText);
}

Merci Bul3 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
Bonjour,
si ajax retourne 0, c'est qu'il y a une erreur
( probablement le fichier non trouvé )
quand c'est bon, il retourne 200
j'aurais plutôt mis .onreadystatechange avant l'open,
mais bon, ça ne doit pas jouer réellement.
Cordialement
Commenter la réponse de Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
ah... je veins de voir :
c'est un fichier xml ?
si oui :
vous testez en local pur ou avce wamp ou easyphp ou .. ?
si oui :
le souci est avec IE ou tous les navigateurs ?
Commenter la réponse de Bul3
Messages postés
25
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
17 novembre 2009
0
Merci
Hum quand je dit local, c'est ce qui a de plus local possible lol. J'ai seulement cette page html avec les fichiers .js sans serveur apache wamp ou easyphp. Donc j'ouvre cette page html et j'ai une adresse du genre file:///... (sous firefox) et C:\... sous internet explorer. Et j'ai absolument les mêmes fichiers identique sur mon serveur (sur la même adresse que maplerank.maplechiefs.com).

Je sais que sa doit pas venir de permissions du serveur, car je test avec d'autres adresses et sa me donne le même résultat...

hum et oui c'est bien un fichier xml, comme test je vais chercher le fichier xml http://maplerank.maplechiefs.com/xml/characterCheck-gms-NxTheif.xml. Et j'ai essayer si j'enregistre ce fichier XML en local, et ensuite que dans méthode open je vais chercher cette adresse en local et sa fonctionne.

Lorsque je test en firefox, c'est le résultat que j'ai, avoir 0. Et sous internet explorer il me met une erreur disant Access is Denied...

Mais je croit c bon, j'ai trouver sa https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript et je croit que c'est la cause de cette erreur.
Commenter la réponse de cs_Erick007
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
alors déjà, c:\... ça ne fonctionne pas
c:\\... il faut echapper les \, si vous ne
l'avez pas fait, ou utiliser /
utilisez donc la même chose qu'avec Fx
ça baigne.

ensuite, window.XMLHttpRequest répond true aussi
avec IE ( depuis la version 7 ? ) et quand c'est en
pur local, IE refuse pour un xml : il faut utiliser
new ActiveXObject("Microsoft.XMLHTTP");

perso j'emploie les fonctions dédiées
pour chaque navigateurs
new ActiveXObject('Microsoft.XMLDOM')
et .load(fichier) pour IE
document.implementation.createDocument
et .load(fichier) pour Fx
new XMLHttpRequest();
et .open et .send effectivement pour les autres
Commenter la réponse de Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
>il me met une erreur disant Access is Denied...
je n'avais pas lu/répondu jusqu'au bout
ça vient donc bien du .XMLHttpRequest qu'IE
ne veut pas utiliser pour un fichier xml en
pur local. soit ActiveXObject("Microsoft.XMLHTTP");
soit les fonctions dédiées/spécifiques au xml
( si elles existent, il doit bien
y avoir des raisons )
Commenter la réponse de Bul3
Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Dernière intervention
20 février 2013
0
Merci
Bonjour,

normalement avec Ajax (enfin je pense ^^), on ne peut pas récupérer une information sur un autre domaine (localhost d'un coté, maplerank.maplechiefs.com de l'autre), on a l'erreur: uncaught exception: Access to restricted URI denied (NS_ERROR_DOM_BAD_URI)
peut être l'explication du pourquoi ca marche sur le serveur et pas en local

bonne après midi
Commenter la réponse de cs_47
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
tu as raison "47"...
mais depuis un site vers un autre site
( sauf avec Fx qui permet des choses )

depuis une page en local on peut accéder
à tous les sites sans restrictions

non, non l'erreur c'est , comme je l'ai dit,
qu'il faut utiliser new ActiveXObject("Microsoft.XMLHTTP");
pour IE au lieu de new XMLHttpRequest();
uniquement en pur local, sur site ou avec
easyphp, wamp... ça baigne ( on se demande
bien pourquoi ! )
Commenter la réponse de Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
"47" avait raison : je viens de tester...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<script type="text/javascript">
function ajax(url)
{	var queryAJAX;
try 		{	queryAJAX = new ActiveXObject("Microsoft.XMLHTTP");	}
catch(e)	{	queryAJAX = new XMLHttpRequest();	}						
queryAJAX.open('GET', url+'?'+new Date(), false);
queryAJAX.send(null);
alert(queryAJAX.responseText);
}
</script>
</head>

en local
sur site

</html>

ça marche en local
sur le site, c'est ok avec IE, mais ça ne plait pas à Fx :
Erreur : uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///D:/Utilitaires/WampServer/www/Essais/fichier%20avec%20ajax/test.htm :: ajax :: line 10" data: no]

il doit manquer une "instruction quelconque"
avec Fx pour l'autoriser à faire.
bien entendu, avec easyphp ou wamp
vers le site ce serait rejeté pour
tous les navigateurs
Commenter la réponse de Bul3
Messages postés
25
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
17 novembre 2009
0
Merci
Merci pour toutes ces réponses j'essai tout sa en fin de semaine
Commenter la réponse de cs_Erick007
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
l'exemple est en synchrone et ne fait qu'un
alert d'un fichier à la con, c'était pour
simplifier au maximum.
le principe reste valable dans tous les cas.
Commenter la réponse de Bul3
Messages postés
25
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
17 novembre 2009
0
Merci
Bonjour,

merci sa fonctionne bien, je connaissais pas les privilèges. J'ai par contre quelque questions encore.

J'ai lu que UniversalBrowserRead ignore la politique Same Origin Policy et peut aller lire des fichiers sur d'autre domaines, ce que j'ai de besoin. Ma question est qu'est ce que le privilège UniversalXPConnect fait?

Et ma seconde question, lorsque je met la ligne de code
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');

entre la ligne de code pour créer l'objet XMLHttpRequest et la ligne de code queryAJAX.open tout est fonctionnel, mais si je veut séparer mon code et faire en sorte que c'est une fonction qui créer l'objet XMLHttpRequest avec l'ajout du Privilège permetant d'accéder a un fichier a l'externe et que cet fonction retourne l'objet XMLHttpRequest sa ne fonctionne pas.

par exemple:
function loadCharacter(txtVersion, txtCharacter) {
objXHR = createObjXHR();
if(objXHR) {
// Si je met cette ligne ici et non dans createObjXHR, sa fonctionne.
// netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
objXHR.open("GET", "http://maplerank.maplechiefs.com/xml/characterCheck-" + txtVersion + "-" + txtCharacter + ".xml", true);
objXHR.onreadystatechange = displayCharacter;
objXHR.send(null);
document.getElementById("status").innerHTML = "loading";
} else {
document.getElementById("status").innerHTML = "Objet XML null";
}
}

function createObjXHR() {
if(window.ActiveXObject) { // Microsoft
var names = ["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
for(var i in names) {
try {
return new ActiveXObject(names[i]);
} catch(e) {}
}
}

if(window.XMLHttpRequest) {
var value;
value = new XMLHttpRequest();
// lorsque je cet ligne situer ici sa ne fonctionne pas
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
return value;
}

return null;
}


Est ce qui a une façon d'avoir cette ligne pour le privilège dans mon fonction (ce qui me permet de mieux séparer mon code)?

Merci.
Commenter la réponse de cs_Erick007
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
>>et peut aller lire des fichiers sur d'autre domaines,
>>ce que j'ai de besoin. Ma question est qu'est ce que
>>le privilège UniversalXPConnect fait?
je ne crois pas (?), le seul truc :
header("Access-Control-Allow-Origin: *");

en php coté serveur, sur l'autre domaine
( exemple ici pour autoriser tout le monde ! )
en javascript coté client, rien de particulier
à dire... à mon sens
attention , c'est exclusif Fx je crois (?)

pour netscape.security.... j'avoue ne jamais
l'avoir utilisé que comme dans mon exemple
queryAJAX = new XMLHttpRequest();
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');	
juste derrière XMLHttpRequest
cette manière de faire me convenant...
Commenter la réponse de Bul3
Messages postés
25
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
17 novembre 2009
0
Merci
ha c'est super Access-Control-Allow-Origin, c'est absolument ce que j'avais de besoin (sa évite qui pause la question de sécurité). Merci.

Mais hum je croit je me suis mal expliqué, lorsqu'on utilise
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');

D'après ce site, sa dit qui a 2 privilèges sont ajouté, UniversalXPConnect et UniversalBrowserAccess. Je comprend l'utilité de UniversalBrowserAccess mais pas de UniversalXPConnect. Est ce que tu pourrais m'expliquer qu'est ce que fais UniversalXPConnect? Merci.
Commenter la réponse de cs_Erick007
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
>>2 privilèges sont ajouté
exact et je ne sais pas trop ;o)
j'ai vu les 2, je les met, ça me semblait
logique mais maintenant que vous posez la question...
Commenter la réponse de Bul3
Messages postés
25
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
17 novembre 2009
0
Merci
Ha ok, pas grave. Merci pour tout
Commenter la réponse de cs_Erick007

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.