2013-06-03 25 views
2

J'ai le code suivant très simple qui lit juste un fichier JSON:Chemin relatif et absolu JavaScript

<html> 
<head> 
<meta charset="ISO-8859-1"> 
<title>JSON Test</title> 
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
<script> 
$(function() 
{ 
    alert (1); 
    $.getJSON('data/sample.json', function(json) 
    { 
     alert(2); 

    }); 
}); 
</script> 
</head> 
<body> 
    <div id="datadiv">This is the info: </div> 
</body> 
</html> 

je charge le fichier ci-dessus sur un serveur Tomcat et peut charger le fichier en utilisant: http://myserver.com:8080/Html5_Test_1/jsonTest.html. Le code ci-dessus fonctionne et alert (2) est appelé. Cependant, si je change le chemin que j'utilise pour getJSON vers /Html5_Test_1/data/sample.json, cela ne fonctionnera pas.

Je pense que /Html5_Test_1/data/sample.json est le chemin absolu pour data/sample.json, et devrait fonctionner. En fait, j'ai essayé /data/sample.json, Html5_Test_1/data/sample.json, et aucun ne fonctionne. Le seul chemin qui fonctionne est data/sample.json.

Quelqu'un peut-il me dire ce qui ne va pas? Le chemin absolu /Html5_Test_1/data/sample.json fonctionnerait certainement en Java. Alors, le concept de chemin absolu et relatif est-il un peu différent en JavaScript?

Notez que le fichier est en cours d'accès en tant que fichier public sur le serveur et non en tant que fichier sur le système de fichiers local.

+0

Avez-vous confirmé en tapant l'adresse directement dans la barre d'adresse du navigateur (http: // localhost: 8080/Html5_Test_1/data/sample.json)? Si vous regardez dans l'onglet réseau des outils de développement du navigateur, quelle URL essaie-t-il de charger? – JJJ

+0

Oui, j'ai confirmé que le fichier peut être chargé en utilisant localhost: 8080/Html5_Test_1/data/sample.json. – user1888243

+0

Ok, pouvez-vous vérifier le contenu réel de la requête 'GET' lorsque vous spécifiez' '/ Html5_Test_1/data/sample.json'' comme URL? Et comparez cette ligne avec celle envoyée par la requête '' data/sample.json''. – raina77ow

Répondre

1

Les deux data/sample.json et /Html5_Test_1/data/sample.json devraient fonctionner parfaitement. Je pense que vous avez un problème avec le cache du navigateur. Effacez le cache de votre navigateur et réessayez.

Si cela ne fonctionne pas, essayez un autre navigateur. Je ne vois aucune situation que les chemins ci-dessus ne fonctionneraient pas à moins que le cache de votre navigateur ne soit corrompu.

1

Vous semblez mélanger les chemins absolus/relatifs du système de fichiers et les URL absolues/relatives. Rappelez-vous, JavaScript est côté client langue, il n'a rien à voir avec le système de fichiers du serveur qui héberge sa page maître. Donc, vous préférez mettre en place une URL relative, en tenant compte du fait que son point de départ sera probablement le chemin du fichier servi.

Mais pourquoi cela fonctionne maintenant, vous pouvez demander? Cochez cette case:

/Html5_Test_1/ 
.. data/ 
.... sample.json 
.. jsonTest.html 

... et rappelez-vous, une URL sera considéré comme lié au répertoire qui contient fichier jsonTest.html. Il est facile de voir pourquoi le chemin relatif correct est data/sample.json (ou './data/sample.json').

Si vous le souhaitez, vous pouvez changer votre code à quelque chose comme ça ...

$.getJSON('file:///Html5_Test_1/data/sample.json', function(json) ...); 

... mais ce sera évidemment le rendre inutilisable sur une autre machine que la vôtre.

+0

Je ne pense pas que vous pouvez charger des fichiers à partir du système de fichiers local avec AJAX, même sur votre propre ordinateur. – JJJ

+0

Bien que le serveur soit évidemment sur l'hôte local, mais le fichier sample.json est en cours d'accès en tant que fichier sur le serveur, et non en tant que fichier sur le système de fichiers local. – user1888243

+0

@Juhana Oui, même dans certains navigateurs (Chrome). Ces restrictions peuvent être levées, mais ce n'est pas le point: j'ai essayé de montrer la différence entre les chemins du système de fichiers et les URL. – raina77ow

Questions connexes