・ Le tutoriel Rails est la 4ème édition ・ Cette étude est le 3e tour (2e tour après le chapitre 9) ・ L'auteur est un débutant qui a fait tout Progate
・ Si vous le lisez, vous ne le comprendrez pas. ・ Recherchez et résumez les termes que vous ne comprenez pas (en bas de l'article, glossaire). ・ Plongez dans ce que vous ne comprenez pas. ・ Travaillez sur tous les exercices. ・ Ne copiez pas le code autant que possible.
Dernier! !! !! !! !! Courez jusqu'au bout! !! !! !! !!
Cliquez ici pour le BGM qui décore le dernier. My Bloody Valentine "Loveless" Un morceau qui semble commencer et finir. Plus en charge d'Ochi. Écoutons tout en faisant du jus de cerveau à un volume élevé.
2. En référence à la figure 14.7, quel sera le résultat si user.following est exécuté pour l'utilisateur avec id = 2? Aussi, user.following.map (&: id) pour le même utilisateur. Quel serait le résultat si vous couriez? → Renvoie l'id de l'utilisateur que l'utilisateur 2 suit (1 dans ce cas). Ce dernier est la séquence.
>> user = User.first
User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
=> #<User id: 1, name: "Example User", email: "[email protected]", created_at: "2020-09-21 06:47:51", updated_at: "2020-09-21 06:47:51", password_digest: "$2a$10$nAPmDn2RaEHJcHlMrK2PK.nOxUN4ULh7yUHchZRZtSZ...", remember_digest: nil, admin: true, activation_digest: "$2a$10$l9hNDaXUmopBnprlT0H7J.YFieEB8U9OoNgA0mzcrPS...", activated: true, activated_at: "2020-09-21 06:47:51", reset_digest: nil, reset_sent_at: nil>
>> other_user = User.second
User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? OFFSET ? [["LIMIT", 1], ["OFFSET", 1]]
=> #<User id: 2, name: "Ms. Jerry Hermann", email: "[email protected]", created_at: "2020-09-21 06:47:52", updated_at: "2020-09-21 06:47:52", password_digest: "$2a$10$4n7IPw3AcdhW6IzNuLygIuVLA26qlTNneHXDXIqW0zp...", remember_digest: nil, admin: false, activation_digest: "$2a$10$QNHMG3qKng0pFdQdDfGNMeFZaDiddcT0z3ovdEVcOcn...", activated: true, activated_at: "2020-09-21 06:47:52", reset_digest: nil, reset_sent_at: nil>
>> user.active_relationships.create(followed_id: other_user.id)
(0.1ms) SAVEPOINT active_record_1
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
SQL (3.4ms) INSERT INTO "relationships" ("follower_id", "followed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["follower_id", 1], ["followed_id", 2], ["created_at", "2020-09-23 12:37:03.376561"], ["updated_at", "2020-09-23 12:37:03.376561"]]
(0.1ms) RELEASE SAVEPOINT active_record_1
=> #<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2020-09-23 12:37:03", updated_at: "2020-09-23 12:37:03">
2. Après avoir terminé l'exercice précédent, vérifiez la valeur de active_relationship.followed et la valeur de active_relationship.follower, et assurez-vous que chaque valeur est correcte. → Il apparaît au bas de la réponse ci-dessus.
has_many: nom du tableau, via :: nom de la table, source :: l'ensemble original du tableau ... c'est un peu déroutant. N'aurait-il pas dû être défini par le nom utilisé dans le nom d'origine? Doute.
>> user = User.first
User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
=> #<User id: 1, name: "Example User", email: "[email protected]", created_at: "2020-09-21 06:47:51", updated_at: "2020-09-21 06:47:51", password_digest: "$2a$10$nAPmDn2RaEHJcHlMrK2PK.nOxUN4ULh7yUHchZRZtSZ...", remember_digest: nil, admin: true, activation_digest: "$2a$10$l9hNDaXUmopBnprlT0H7J.YFieEB8U9OoNgA0mzcrPS...", activated: true, activated_at: "2020-09-21 06:47:51", reset_digest: nil, reset_sent_at: nil>
>> other_user = User.second
User Load (0.3ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? OFFSET ? [["LIMIT", 1], ["OFFSET", 1]]
=> #<User id: 2, name: "Ms. Jerry Hermann", email: "[email protected]", created_at: "2020-09-21 06:47:52", updated_at: "2020-09-21 06:47:52", password_digest: "$2a$10$4n7IPw3AcdhW6IzNuLygIuVLA26qlTNneHXDXIqW0zp...", remember_digest: nil, admin: false, activation_digest: "$2a$10$QNHMG3qKng0pFdQdDfGNMeFZaDiddcT0z3ovdEVcOcn...", activated: true, activated_at: "2020-09-21 06:47:52", reset_digest: nil, reset_sent_at: nil>
>> user.following?(other_user)
User Exists (0.6ms) SELECT 1 AS one FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ? AND "users"."id" = ? LIMIT ? [["follower_id", 1], ["id", 2], ["LIMIT", 1]]
=> false
>> user.follow(other_user)
(0.1ms) SAVEPOINT active_record_1
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
SQL (6.4ms) INSERT INTO "relationships" ("follower_id", "followed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["follower_id", 1], ["followed_id", 2], ["created_at", "2020-09-23 14:03:47.235565"], ["updated_at", "2020-09-23 14:03:47.235565"]]
(0.1ms) RELEASE SAVEPOINT active_record_1
User Load (0.1ms) SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ? LIMIT ? [["follower_id", 1], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy [#<User id: 2, name: "Ms. Jerry Hermann", email: "[email protected]", created_at: "2020-09-21 06:47:52", updated_at: "2020-09-21 06:47:52", password_digest: "$2a$10$4n7IPw3AcdhW6IzNuLygIuVLA26qlTNneHXDXIqW0zp...", remember_digest: nil, admin: false, activation_digest: "$2a$10$QNHMG3qKng0pFdQdDfGNMeFZaDiddcT0z3ovdEVcOcn...", activated: true, activated_at: "2020-09-21 06:47:52", reset_digest: nil, reset_sent_at: nil>]>
>> user.following?(other_user)
User Exists (0.2ms) SELECT 1 AS one FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ? AND "users"."id" = ? LIMIT ? [["follower_id", 1], ["id", 2], ["LIMIT", 1]]
=> true
>> user.unfollow(other_user)
Relationship Load (0.2ms) SELECT "relationships".* FROM "relationships" WHERE "relationships"."follower_id" = ? AND "relationships"."followed_id" = ? LIMIT ? [["follower_id", 1], ["followed_id", 2], ["LIMIT", 1]]
(0.1ms) SAVEPOINT active_record_1
SQL (0.2ms) DELETE FROM "relationships" WHERE "relationships"."id" = ? [["id", 1]]
(0.1ms) RELEASE SAVEPOINT active_record_1
=> #<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2020-09-23 14:03:47", updated_at: "2020-09-23 14:03:47">
>> user.following?(other_user)
User Exists (0.2ms) SELECT 1 AS one FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ? AND "users"."id" = ? LIMIT ? [["follower_id", 1], ["id", 2], ["LIMIT", 1]]
=> false
2. Revenons aux résultats de l'exécution de chaque commande dans l'exercice précédent et vérifions quel type de SQL était réellement produit. → Comme ci-dessus. INSÉRER et SUPPRIMER.
Oh oui. Est-ce la raison pour laquelle j'ai utilisé through et source dans la section précédente pour gérer une table de différents côtés? Même ainsi, follow_id est difficile à comprendre.
>> user = User.first
User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
=> #<User id: 1, name: "Example User", email: "[email protected]", created_at: "2020-09-21 06:47:51", updated_at: "2020-09-21 06:47:51", password_digest: "$2a$10$nAPmDn2RaEHJcHlMrK2PK.nOxUN4ULh7yUHchZRZtSZ...", remember_digest: nil, admin: true, activation_digest: "$2a$10$l9hNDaXUmopBnprlT0H7J.YFieEB8U9OoNgA0mzcrPS...", activated: true, activated_at: "2020-09-21 06:47:51", reset_digest: nil, reset_sent_at: nil>
>> other1 = User.second
User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? OFFSET ? [["LIMIT", 1], ["OFFSET", 1]]
=> #<User id: 2, name: "Ms. Jerry Hermann", email: "[email protected]", created_at: "2020-09-21 06:47:52", updated_at: "2020-09-21 06:47:52", password_digest: "$2a$10$4n7IPw3AcdhW6IzNuLygIuVLA26qlTNneHXDXIqW0zp...", remember_digest: nil, admin: false, activation_digest: "$2a$10$QNHMG3qKng0pFdQdDfGNMeFZaDiddcT0z3ovdEVcOcn...", activated: true, activated_at: "2020-09-21 06:47:52", reset_digest: nil, reset_sent_at: nil>
>> other2 = User.third
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? OFFSET ? [["LIMIT", 1], ["OFFSET", 2]]
=> #<User id: 3, name: "Bernice Rippin", email: "[email protected]", created_at: "2020-09-21 06:47:52", updated_at: "2020-09-21 06:47:52", password_digest: "$2a$10$fsftEGHfcujlrAy4h.X2VelOSKNXNDnk71MbkBPOqSA...", remember_digest: nil, admin: false, activation_digest: "$2a$10$4DlqqHWVesXipOA4xC/XAOlA70S8T6PjkH3/T4RAI7M...", activated: true, activated_at: "2020-09-21 06:47:52", reset_digest: nil, reset_sent_at: nil>
>> other1.follow(user)
(0.1ms) SAVEPOINT active_record_1
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
SQL (0.1ms) INSERT INTO "relationships" ("follower_id", "followed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["follower_id", 2], ["followed_id", 1], ["created_at", "2020-09-23 22:04:23.011442"], ["updated_at", "2020-09-23 22:04:23.011442"]]
(0.1ms) RELEASE SAVEPOINT active_record_1
User Load (0.1ms) SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ? LIMIT ? [["follower_id", 2], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy [#<User id: 1, name: "Example User", email: "[email protected]", created_at: "2020-09-21 06:47:51", updated_at: "2020-09-21 06:47:51", password_digest: "$2a$10$nAPmDn2RaEHJcHlMrK2PK.nOxUN4ULh7yUHchZRZtSZ...", remember_digest: nil, admin: true, activation_digest: "$2a$10$l9hNDaXUmopBnprlT0H7J.YFieEB8U9OoNgA0mzcrPS...", activated: true, activated_at: "2020-09-21 06:47:51", reset_digest: nil, reset_sent_at: nil>]>
>> other2.follow(user)
(0.1ms) SAVEPOINT active_record_1
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 3], ["LIMIT", 1]]
SQL (0.1ms) INSERT INTO "relationships" ("follower_id", "followed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["follower_id", 3], ["followed_id", 1], ["created_at", "2020-09-23 22:04:33.583218"], ["updated_at", "2020-09-23 22:04:33.583218"]]
(0.1ms) RELEASE SAVEPOINT active_record_1
User Load (0.1ms) SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ? LIMIT ? [["follower_id", 3], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy [#<User id: 1, name: "Example User", email: "[email protected]", created_at: "2020-09-21 06:47:51", updated_at: "2020-09-21 06:47:51", password_digest: "$2a$10$nAPmDn2RaEHJcHlMrK2PK.nOxUN4ULh7yUHchZRZtSZ...", remember_digest: nil, admin: true, activation_digest: "$2a$10$l9hNDaXUmopBnprlT0H7J.YFieEB8U9OoNgA0mzcrPS...", activated: true, activated_at: "2020-09-21 06:47:51", reset_digest: nil, reset_sent_at: nil>]>
>> user.followers.map(&:id)
User Load (0.2ms) SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = ? [["followed_id", 1]]
=> [2, 3]
2. Après avoir terminé l'exercice ci-dessus, vérifiez que le résultat de l'exécution de user.followers.count correspond au nombre d'utilisateurs que vous avez suivis précédemment. → Ci-dessous
>> user.followers.count
(0.2ms) SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = ? [["followed_id", 1]]
=> 2
3. Quel est le contenu de la sortie de l'instruction SQL suite à l'exécution de user.followers.count? Existe-t-il également des différences par rapport au résultat d'exécution de user.followers.to_a.count? Conseil: Quelle est la différence si un utilisateur compte 1 million d'abonnés? Pensez-y. → SQL est comme ci-dessus. La création d'un tableau peut prendre du temps et de la charge. Donc, seul le compte est meilleur.
>> user.followers.to_a.count
=> 2
>> User.first.followers.count
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
(0.2ms) SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = ? [["followed_id", 1]]
=> 38
2. Comme pour l'exercice précédent, confirmons que les résultats de User.first.following.count correspondent également. → C'est aussi OK
>> User.first.following.count
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
(0.2ms) SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ? [["follower_id", 1]]
=> 49
Routage des membres: vous pouvez ajouter un nouveau routage au routage RESTful. membre prend la forme d'un bloc. Gère les URL qui incluent les identifiants utilisateur. Si id n'est pas spécifié, utilisez collection.
2. Affichez la page d'accueil et la page de profil à partir du navigateur et vérifiez si les informations statistiques s'affichent correctement. → Les deux statistiques s'affichent.
3. Écrivons un test pour les informations statistiques affichées sur la page d'accueil. Conseil: essayez d'ajouter au test présenté dans l'extrait 13.28. De la même manière, ajoutons un test à la page de profil. → Ci-dessous. Quand je l'ai recherché, j'ai trouvé qu'il était écrit sous la forme @ user.active (ou passive) _relationships. Puis-je utiliser l'un ou l'autre? Quand je l'ai essayé sur la console, les deux ont renvoyé le même résultat, mais peut-être parce que les relations ont moins de traitement?
saite_layout_tesr.rb
test "stats" do
log_in_as(@user)
get root_path
assert_match @user.following.count.to_s, response.body
assert_match @user.followers.count.to_s, response.body
end
user_profile_test.rb
test "profile display" do
get user_path(@user)
assert_template 'users/show'
assert_select 'title', full_title(@user.name)
assert_select 'h1', text: @user.name
assert_select 'h1>img.gravatar'
assert_match @user.following.count.to_s, response.body
assert_match @user.followers.count.to_s, response.body
assert_match @user.microposts.count.to_s, response.body
assert_select 'div.pagination', count: 1
@user.microposts.paginate(page: 1).each do |micropost|
assert_match micropost.content, response.body
end
end
>> user.active_relationships.count
(0.1ms) SELECT COUNT(*) FROM "relationships" WHERE "relationships"."follower_id" = ? [["follower_id", 1]]
=> 49
>> user.following.count
(0.2ms) SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ? [["follower_id", 1]]
=> 49
2. Essayez de commenter le code associé à assert_select dans l'extrait 14.29 pour vous assurer que le test devient correctement rouge. → Ça? Sera-ce ROUGE? … Ah, non? J'ai également dû commenter le rendu. Je n'ai commenté que le bloc @users. Suivant.
ruby:show_follow.html.erb
<% provide(:title, @title) %>
<div class="row">
<aside class="col-md-4">
<section class="user_info">
<%= gravatar_for @user %>
<h1><%= @user.name %></h1>
<span><%= link_to "view my profile", @user %></span>
<span><b>Microposts:</b><%= @user.microposts.count %></span>
</section>
<section class="stats">
<%= render 'shared/stats' %>
<% if @users.any? %>
<div class="user_avatars">
<%# @users.each do |user| %>
<%#= link_to gravatar_for(user, size: 30), user %>
<%# end %>
</div>
<% end %>
</section>
</aside>
<div class="col-md-8">
<h3><%= @title %></h3>
<% if @users.any? %>
<ul class="users follow">
<%#= render @users %>
</ul>
<%= will_paginate %>
<% end %>
</div>
</div>
2. Après avoir terminé l'exercice précédent, jetons un œil au journal du serveur Rails. Quel modèle est dessiné lors de l'exécution du suivi / non-suivi? → Rendering users/show.html.erb within layouts/application
Implémentation Ajax: ① Entrez remote: true dans form_for. (2) Entrez la méthode respond_to dans l'action du contrôleur. Recevez les demandes Ajax. (3) Si JS est désactivé côté navigateur, ajoutez sa description au fichier config / application.rb. ④ Entrez jQuery dans le nom de l'action .js.erb. J'ai oublié jQuery ... Allez-vous l'examiner avec progate?
2. Après avoir confirmé dans l'exercice précédent, parcourons le journal du serveur Rails et vérifions à quoi ressemble le modèle immédiatement après avoir exécuté follow / unfollow. → Rendering relationships/create.js.erb Rendering relationships/destroy.js.erb
Vous pouvez tester le fonctionnement d'Ajax simplement en entrant xhr: true.
2. Quel est le résultat de la suppression d'une seule des lignes avec xhr: true dans le listing 14.40? La cause du problème qui se produit à ce moment et pourquoi le test confirmé dans l'exercice précédent a détecté ce problème. Pensez-y. → Je ne sais pas combien supprimer, mais si vous le supprimez pour que la grammaire ne change pas, il sera VERT. Est-ce parce qu'il n'y a pas de format à afficher lorsque JS est désactivé? (Il est ambigu de savoir si l'exercice précédent est l'exercice 1 ou la dernière suppression ...)
user.rb
def feed
Micropost.where("user_id IN (?)", following_ids)
end
2. Comment puis-je ne pas inclure les messages des abonnés dans l'extrait 14.44? Et quel test dans l'extrait 14.42 échouerait si j'effectuais une telle modification? → Le contraire de 1. Effacez l'ancien ensemble. #Vérifiez les messages des utilisateurs que vous suivez. Les 3 lignes suivantes de FAIL sont renvoyées.
3. Comment puis-je inclure des messages d'utilisateurs non suivis dans la fiche 14.44? Et quel test de la fiche 14.42 échouerait si j'apportais une telle modification? Pensez au type d'ensemble que représentent les utilisateurs et les autres ensembles. → Ce ne sont que des micro-messages, n'est-ce pas? Donc ci-dessous. FAIL confirme le dernier # post d'un utilisateur non suivi.
user.rb
def feed
Micropost.all
end
following_test.rb
test "feed on Home page" do
get root_path
@user.feed.paginate(page: 1).each do |micropost|
assert_match CGI.escapeHTML(micropost.content), response.body
end
end
2. Dans le code du Listing 14.49, le HTML attendu est échappé avec la méthode CGI.escapeHTML (cette méthode a le même but que CGI.escape traité en 11.2.3). Pourquoi ce code a-t-il besoin d'échapper au HTML? Pensez-y. Conseil: essayez de supprimer le processus d'échappement et examinez attentivement le contenu HTML résultant. Il y a un problème avec le contenu du micropost. Vous pouvez également utiliser la fonction de recherche de terminal (Cmd-F ou Ctrl-F) pour rechercher «désolé» pour aider à déterminer la cause. → Wow, quand je l'ai testé, j'ai eu une quantité terrible de texte d'erreur. Si vous recherchez pardon, "Vos mots avaient un sens, mais pas votre ton sarcastique." = "Vos mots ont un sens, mais votre ton ironique ne l'était pas. Je veux dire, y a-t-il quelque chose qui ne peut pas être affiché sans s'échapper?
-Vous pouvez nommer et gérer les éléments de table de manière flexible en définissant has_many dans le modèle. · Le routage peut être imbriqué pour ajouter du nouveau aux ressources. -Adoptez Ajax pour le formulaire en utilisant jQuery. ・ SQL peut être utilisé selon les besoins. ・ Le tutoriel n'est qu'un tutoriel. Sachez que vous avez enfin atteint la ligne de départ (un commandement pour vous-même).
Deux tours et demi terminés! !! Je vous remercie! !! !!
À partir du 1er septembre, c'est aujourd'hui le 25. J'ai réussi à le terminer dans le mois que je visais. Je pense que le contenu appris dans le didacticiel m'est venu à l'esprit, mais en enquêtant sur les questions à chaque fois, j'ai l'impression qu'il y a 99% de choses que je ne sais pas encore. C'est donc la dernière phrase du résumé. Au contraire, j'ai l'impression que je suis toujours debout sur la ligne de départ. Je commence juste à grimper, alors cette pente d'homme infiniment lointaine ...
Eh bien, c'est tout pour le tutoriel Rails. La prochaine étape est d'aller à l'école. À ce stade, j'ai réalisé que la capacité d'auto-propulsion et la capacité d'auto-apprentissage sont plus importantes que l'école honnête ununun. Cependant, comme le titre de l'article le suggère, je n'ai pas le temps de dire quelque chose de clément. Afin de défier le monde, il est nécessaire de se concentrer étroitement et d'étudier dans les backwaters. La prochaine étape consiste donc à étudier à l'école. Quoi qu'il en soit, je pense que c'est la même chose de rechercher et de penser par vous-même et d'écrire le code, mais cela vaut vraiment la peine de demander à l'instructeur de regarder votre code et de vous dire ce dont vous avez besoin, et cela vous fera gagner du temps. Je pense que ce sera connecté. C'est une façon adulte de dire de l'argent. Je l'imite.
Si vous avez du temps libre pour écrire quelque chose comme ça, parlez d'étudier! À la prochaine! J'aime écrire des articles, alors je ferai de mon mieux pour écrire des articles utiles un jour! !!
⇦ Cliquez ici pour le chapitre 13 Cliquez ici pour les conditions préalables et le statut de l'auteur pour l'apprentissage
・ Ajax Abréviation de JavaScript asynchrone + XML. Une technologie qui déplace le contenu d'une page de différentes manières sans déplacer ni recharger la page.
·asynchrone Lors du transfert de données, échangez des données sans vous soucier de la synchronisation (synchronisation) entre le côté émetteur et le côté réception.
・ XML (langage de balisage extensible) Un langage de balisage extensible. Une des règles de l'écriture. Il est principalement utilisé dans le but de faciliter l'échange et la gestion des données.
・ DOM (modèle d'objet de document) Ce n'est pas le noir qui plane. Il s'agit d'un mécanisme permettant d'exploiter librement des pages Web telles que HTML à partir d'un programme, et a une structure hiérarchique (arborescence).
Recommended Posts