2011-06-26 5 views
-4

Je cours avec un serveur avec le langage de programmation Go, et quand je charge le serveur dans le navigateur, la fonction de gestionnaire de temp est appelée et le fichier getjson.html est servi par cette fonction. Maintenant, l'écran affiche un bouton "Get Json Data". En cliquant sur ce bouton, je n'obtiens aucun résultat (car quelque chose devrait être affiché sur l'écran).lire des données json à partir d'un fichier

J'ai vérifié la console javascript et il n'y a aucune erreur en tant que telle. Je ne suis pas capable de comprendre quel est le problème, pourquoi il n'y a pas de sortie à l'écran.

Contenu de servejson.go:

package main 

import (
    "http" 
    "flag" 
) 

var path = flag.String("root", "/home/chinmay/work/json/getjson.html", "Set root directory, use absolute path") 

func temp(w http.ResponseWriter, r *http.Request){ 
    w.Header().Set("Content-Type", "text/html") 
    http.ServeFile(w,r,*path) 
} 

func main(){ 
    http.HandleFunc("/",temp) 
    http.ListenAndServe(":8080", nil) 
} 

Contenu du getjson.html:

package main 

import (
    "http" 
    "flag" 
) 

var path = flag.String("root", "/home/chinmay/work/json/getjson.html", "Set root directory, use absolute path") 

func temp(w http.ResponseWriter, r *http.Request){ 
    w.Header().Set("Content-Type", "text/html") 
    http.ServeFile(w,r,*path) 
} 

func main(){ 
    http.HandleFunc("/",temp) 
    http.ListenAndServe(":8080", nil) 
} 

Contenu du json_data.js:

{ 
    "firstName": "John", 
    "lastName": "Doe", 
    "age": 25 
} 
+1

Oui, cela devrait être possible - 'getJSON()' * devrait * le faire même si le type de contenu du fichier texte sera 'text/plain'. Je ne suis pas tout à fait sûr, mais pourquoi ne pas simplement essayer? –

+0

Essayez-vous de lire le fichier texte à partir de la machine locale? Je ne crois pas que ce soit possible en js –

+0

en fait je cours un serveur et puis je servirais ce fichier html contenant le script js qui essaierait alors d'accéder au fichier file.txt pour obtenir les données json et l'imprimer à l'écran . – chinmay

Répondre

0

Oui, vous pouvez. Live example. À condition que json.txt soit une ressource à côté du document dans lequel ce code est exécuté et (sur certains navigateurs) à condition que ce fichier ne fonctionne pas à partir d'un fichier local (par exemple, une URL file:// plutôt qu'une http://); fichiers locaux accédant à d'autres fichiers locaux via ajax, d'autres ne le sont pas).

Quelques notes:

  • Dans le

    $("div").append(field + " "); 
    

    ligne, field sera la valeur de chaque propriété (par exemple, "John").

  • L'ordre dans lequel les propriétés sont répertoriées est complètement indéfini.

Donc, pour cet exemple précis , vous seriez probablement mieux avec

<script type="text/javascript"> 
$(document).ready(function(){ 
    $("button").click(function(){ 
    $.getJSON("json.txt",function(result){ 
     $("div").append(result.firstName + " " + result.lastName + " " + result.age); 
    }); 
    }); 
}); 
</script> 

Live example


Mise à jour: De vos commentaires sur une autre réponse, il semble Comme si vous n'étiez pas clair sur où et comment le code de script est en cours d'exécution. Le script JavaScript s'exécute sur le navigateur du client. Le chemin à utiliser pour référencer json.txt est exactement comme (disons) le chemin d'accès à une image que vous souhaitez afficher sur une page. json.txt doit être accessible via le serveur Web, tout comme une image doit être accessible via le serveur Web. Pensez à json.txt comme une autre ressource utilisée par votre page Web, comme les autres. En termes de chemin, et comment vous devez rendre disponible json.txt, les mêmes règles s'appliquent. Pour être clair: le script s'exécutant côté client dans une page Web ne peut pas accéder à un fichier côté serveur qui ne peut pas être récupéré par le navigateur.


Mise à jour 2: Vous avez plus de code posté, et il semble que vous avez fait votre serveur seulement servir le fichier getjson.html. Votre serveur également doit servir le fichier json.txt, ou le navigateur ne peut pas y accéder.

+0

S'il vous plaît vérifier l'exemple http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_ajax_getjson – chinmay

+0

@chinmay: C'est essentiellement ce que j'ai fait avec les liens en direct. Je ne vois pas pourquoi tu voulais le regarder ...? –

+0

Je voulais le regarder parce que le code manipule le fichier "demo_ajax_json.js" dans la partie .html, c'est exactement ce que je voudrais faire. J'essaye de le faire using un serveur de go dont le code que j'ai donné ci-dessus. Il sert essentiellement le fichier .html, ce fichier .html puis essaie de faire ce qui est fait dans l'exemple. Cependant, je ne suis pas en mesure d'obtenir les résultats attendus. Où ai-je tort ici? Les chemins des fichiers sont-ils corrects dans le code? Le .le fichier html est en train d'être servi mais quand j'appuie sur le bouton getJSONdata rien ne se passe, rien ne s'imprime :( – chinmay

-1

$ .getJSON() nécessite une URL en tant que paramètre. Vous essayez d'accéder à un fichier à partir de la structure de répertoire de la machine/serveur local, ce qui n'est pas possible dans JS.

Voir la documentation jquery http://api.jquery.com/jQuery.getJSON/

0

Désolé si cela n'a rien à voir Go, mais je Falt ici en cherchant une solution à un problème similaire dans JQuery et la solution est sans rapport avec l'outil utilisé.

J'ai eu un problème aujourd'hui pour simuler une requête JSON sur un programme lié à une base de données, sans la base de données. J'ai donc enregistré un résultat Json dans un fichier et je voulais l'utiliser à la place. Le fichier json.txt était sur un serveur et affichable dans le navigateur mais $ .getJSON affichait une erreur.

Pour résoudre ce problème, tout ce que je devais faire est de renommer le fichier avec une extension "html", comme json.html et de supprimer l'en-tête dans le fichier. C'est-à-dire que vous ne devez PAS avoir "Content-Type: application/json" au début de votre fichier texte.

Peut être spécifique à un serveur Web (Apache) ou à la sécurité du navigateur (Firefox), mais au moins cela a fonctionné.

Questions connexes