Question

Je veux construire la page web avec "la dégradation Graceful". Autrement dit, les fonctions de la page web même javascript est désactivé. Maintenant, je dois prendre des décisions de conception sur le format de la réponse AJAX.

Si javascript est désactivé, chaque requête HTTP au serveur génère HTML comme réponse. Les rafraîchi navigateur avec le code HTML retourné. Très bien.

Si javascript est activé, chaque requête HTTP AJAX au serveur va générer ... eh bien, JSON ou HTML.

S'il est HTML, il est facile à mettre en œuvre. Juste javascript pour remplacer une partie de la page avec le code HTML retourné. Et, côté serveur, pas beaucoup de changement de code est nécessaire.

S'il est JSON, alors je dois mettre en œuvre la logique JSON-to-html en javascript qui est à nouveau en double presque de la logique côté serveur. Duplication est mal . Je ne sais vraiment pas comme ça. L'avantage est que l'utilisation de la bande passante est meilleure que HTML, ce qui apporte de meilleures performances.

Alors, quelle est la meilleure solution pour la dégradation Graceful? demande AJAX mieux pour revenir JSON ou HTML?

Était-ce utile?

La solution

Je ne pense pas qu'il peut y avoir une « meilleure solution` pour any situation donnée. Seulement peut-être, une « solution appropriée » pour un particulier. Cela dépend vraiment de ce que vous essayez de faire. Quels sont les moyens de dégradation grâce à moi:

  • construire une interface « assez bonne » qui fonctionne sur autant de navigateurs (bureau et mobile) que possible.
  • Discrètement ajouter dans certains scripts (méthodes de validation, des éléments d'interface tels que les onglets et curseurs ou autre) qui ne sera présent si le navigateur la page est chargée en possède les caractéristiques nécessaires pour les faire fonctionner.

Que ce soit pour utiliser le HTML ou JSON dans la réponse du serveur est très subjective, je me retrouve souvent du mal à choisir entre les deux. On pourrait faire valoir, par exemple, que la réception d'un groupe de paires valeur clé du serveur et de les rendre dans un élément de sélection existant signifierait plus code et par conséquent plus de temps passé et le codage des bugs potentiels. Au lieu de cela, vous pouvez demander simplement l'élément de sélection pré-construit à partir du serveur, et l'injecter dans un récipient. La logique pour la construction de l'élément réside déjà sur le serveur, pourquoi construire deux fois, en deux langues différentes.

L'autre point de vue est que JSON minimise l'utilisation de la bande passante, donc il vaut la peine d'aller le mile supplémentaire pour analyser certains JSON pour construire quelques balises sur le client. Je trouve facile d'être en désaccord avec ce point de vue, pour deux raisons (je suis pas généralisante, ne vous méprenez pas). Tout d'abord, beaucoup, beaucoup de serveurs Web sont configurés pour compresser / dégonfler / gzip leur production, et beaucoup, beaucoup de navigateurs acceptent le contenu compressé. Markup est très compressible, car il contient de la redondance des cargaisons (<strong></strong>). Il est donc raisonnable de considérer que la taille d'une réponse JSON ne serait pas inférieur à une écrasante majorité une réponse avec balisage. D'autre part, un grand ensemble de données pourrait signifier un temps d'exécution non négligeable sur le client (boucles méchantes, imbriquées sont monnaie courante - évidente dans certaines des questions qui apparaissent ici)

.

Mon conseil pour vous est d'essayer de comprendre les avantages et les inconvénients de chaque approche, et de tirer parti de cette information. Vous pouvez lire ceci:

http://www.quirksmode.org/blog/archives /2005/12/the_ajax_respon.html

Autres conseils

OMI, en collaboration avec HTML apporte de plus grands risques de sécurité (injection de script MITM, etc.). Tout gain de temps sur « duplication » devrait vraiment être consacré à désinfectante avant d'ajouter.

JSON peut être en toute sécurité et est généralement analysé beaucoup plus compact, comme vous le dites, économiser la bande passante.

Je sais que je choisirais (JSON).

D'abord, réfléchissez bien si vous avez vraiment besoin de soutenir à la fois JavaScript activé et les utilisateurs non activés. Pour mon argent, la grande chose sur AJAX est qu'il sépare l'affichage (construction de HTML) à partir d'informations.

Cela dit, voici une approche que le travail pourrait:

  1. Ecrire un programme côté serveur qui fait ce que vos besoins de la page pour faire et renvoie la réponse (qui se compose de tout) sous la forme la plus simple possible. Pour une sortie simple - comme juste indiquant si cela a fonctionné ou non - cela pourrait être juste un numéro ou une chaîne simple. Pour quelque chose de plus compliqué qu'un seul résultat, il sera probablement XML.

  2. Ecrire un script côté serveur qui appelle simplement votre programme et renvoie le résultat sous forme de texte ou XML simple.

  3. Ecrire un script côté serveur qui appelle votre programme et construit une page HTML de celui-ci.

  4. Dans la page que l'utilisateur appelle à exécuter la routine, comprennent javascripts qui écrivent un contrôle (par exemple un bouton) qui, lorsqu'il est pressé envoie une demande d'AJAX pour appeler le premier script, analyse le résultat et met à jour la page en conséquence. Inclure aussi un autre contrôle, dans les balises NOSCRIPT afin que les utilisateurs qui sont JS-activées ne le verront pas, ce qui fait un formulaire standard soumettre à exécuter votre second script. Donc, vous avez encore besoin de deux scripts, mais la viande principale de votre calcul est effectué une seule fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top