2010-07-08 9 views
2

J'apprends juste comment utiliser ajax/json avec jquery et j'ai frappé un mur de briques que je ne comprends pas.jQuery .getJSON ne fonctionne pas

Voici mon code - code très simple:

$("#click").click(function() { 
    $.getJSON("http://localhost/jsontest/a.json", function(data) { 
     alert("done"); 
    }); 

    }); 

Fondamentalement, la charge a.json et envoyer une alerte à l'écran en disant fait.

Voici le contenu de a.json:

{ "done": "37"}

Voilà.

Cela ne fonctionne pas si ... l'alerte n'est pas affichée.

Des idées, des gens?

+1

http://livehttpheaders.mozdev.org est votre ami. – Anders

+1

Quelle est l'URL de la page faisant la demande? –

+0

Eh bien c'est un "get" JSON donc ça ne devrait pas poser de problème ... – Pointy

Répondre

1

Je parie sur ce point: vous avez oublié de mettre cette configuration codez dans un bloc <script>après votre élément "clic" ou dans un gestionnaire "prêt":

$(function() { 
    $('#click').click(function() { /* ... same stuff as you have ... */ }); 
}); 
1

Y at-il une erreur renvoyée par firebug?

Je commencerai par changer:

$.getJSON("http://localhost/jsontest/a.json?callback=?", function(data) { 

à:

$.getJSON("http://localhost/jsontest/a.json", 'callback=?', function(data) { 
+0

Aucune erreur renvoyée par Firefox - J'ai essayé avec ... a.json? Callback =? - toujours jamais travaillé. Cela fonctionne maintenant - l'alerte (data.done) a fait l'affaire. Merci les gars :-) – icecreamsoop

+1

Donc, quand vous avez dit "l'alerte n'est pas affichée", vous vouliez dire, "l'alerte se produit mais elle contient juste le mot" fait ""? – Pointy

1

Essayez ceci:

$.getJSON("http://localhost/jsontest/a.json", { }, function(data) { 
    alert(data.done); 
}); 
+3

Ce n'est pas nécessaire. Si jQuery voit que le second paramètre est une fonction, il suppose que l'appel ressemble à l'appel de la question d'origine. – Pointy

+0

+1 - La partie '{},' n'est pas nécessaire, le callback peut être le second param, mais le 'alert (data.done)' (au lieu de la chaîne '" done "') est correct. –

+0

Eh bien oui, mais il dit que l'alerte n'est pas affichée. @Nick vous êtes le maître reconnu du repérage "oublié de mettre du code dans un gestionnaire" prêt "des problèmes !! – Pointy

8

J'ai juste eu un problème où je n'ai pas formater les données dans le fichier qu'il récupère correctement. Si le JSON dans le fichier a quelque chose qui ne va pas, il échoue silencieusement. Bien que vous pouvez toujours ajouter .fail (fonction) pour détecter l'échec.

j'utilisais: { varname:"my string" }

Lorsque j'ai utilisé: { "varname":"mystring" }

Pour cette raison, je pense qu'il pourrait être préférable d'utiliser obtenir pour récupérer les données avec .get $(), puis utiliser JSON.parse() dessus. De cette façon, vous savez si le get ou l'analyse a échoué.