2010-04-08 9 views
3

Je vais être détaillé ici. J'utilise Firefox 3.6.3 sur Max OSX avec Firebug 1.5.3.Comment puis-je déboguer pourquoi ce gestionnaire de clic ne se déclenche jamais?

J'ai deux versions d'un projet, une qui fonctionne et une avec un bogue. Un que j'ai téléchargé et un que j'ai tapé à la main. Devinez qui ne fonctionne pas. Ils devraient être les mêmes sauf que le mien utilise une version plus récente de jQuery et que les fichiers sont nommés différemment. La version de jQuery n'est pas le problème. J'ai fait en sorte que le mien utilise l'ancienne jquery et j'ai fait en sorte que le travail utilise la plus récente jquery. Quoi qu'il en soit, le mien est toujours cassé et le téléchargement fonctionne toujours. J'ai cassé mes yeux en essayant de voir comment ces projets sont différents. La seule chose que je ne veux pas faire est de copier le code de travail dans le code éclaté parce que je dois être capable de comprendre ce truc quand c'est mon propre code unique causant des problèmes similaires.

Il n'y a aucune erreur que je peux voir dans Firebug dans mon code, en fait, 2/3 fonctionne très bien. juste le deuxième bouton ne fait rien. Donc je voulais traverser. Ce sont toujours des erreurs oculaires et je crains vraiment de les voir.

Je l'ai mis sur un serveur public. http://colleenweb.com/jqtests/ex71.html Et je veux déboguer ex71.js

Si vous lancez un firebug le travail et définissez un point d'arrêt à la ligne 13 dans ex71.js la variable json a les valeurs attendues lorsque vous cliquez sur le second bouton. Mais si vous firebug celui-ci, il ne sera jamais là. J'ai été sur le html et tous les noms de tout semblent correspondre. Je me demande aussi pourquoi les boutons ne sont pas justifiés à droite mais c'est une chose css. S'il vous plaît dites-moi ce qui me manque, et plus important encore, quel outil/technique je pourrais utiliser pour trouver ces types de bugs.

+0

J'ai retiré le rappel =? c'était parce que je pensais que le nouveau jQuery l'exigeait. mais pas de joie. En ce qui concerne les guillemets, l'exemple de travail a des guillemets simples dans le fichier json autour des valeurs et pas de guillemets autour des clés. Je les ai changés pour doubler sur le serveur de toute façon, les clés et les valeurs et il a résolu le problème. Ça m'aurait pris du temps pour comprendre ça, et je ne laisserai plus jamais de doubles citations sur les fichiers json. Merci pour les réponses, les deux grandes hypothèses. –

+0

@tixrus: Je ne sais pas quelle (technologie côté serveur) vous utilisez pour créer votre fichier JSON (je suppose que vous avez créé votre fichier dans l'exemple manuellement), mais au moins json_encode de PHP produit un JSON valide: http: //php.net/json_encode –

Répondre

3

De api.jquery:

For example, all strings represented in JSON, whether they are properties or values, must be enclosed in double-quotes. For details on the JSON format, see http://json.org/.

Êtes-vous sûr que les données entrantes sont syntaxiquement exactes?

+0

Nope: http://colleenweb.com/jqtests/ex71.json: '{société: 'Springfield Electronics', titre: 'Chef Widget Maker'}' ' –

+0

BINGO! Oh, je dois taper un peu plus longtemps. –

+0

C'était un petit changement étrange d'une version de jQ à l'autre. Content que ça t'aide. – dclowd9901

1

Je pense que la fonction que vous utilisez attend JSONP. C'est ce que le callback =? indique quand même. Avez-vous essayé de le laisser?

$.getJSON('ex71.json', function(json) { 
    $('input#tmpTitle').val(json.title); 
    $('input#tmpCompany').val(json.company); 
}); 

Cette page de la documentation explique dans une note à mi-chemin que le rappel =? peut être utilisé pour JSONP qui est nécessaire pour les appels interdomaines. Si vous ne faites pas d'appel interdomaines, vous n'en avez pas besoin. Si vous effectuez un appel de domaine croisé, vous devez renvoyer JSONP au lieu de JSON standard (ce qui est en réalité beaucoup plus simple que cela ne semble).

http://api.jquery.com/jQuery.getJSON/