Dz13 js.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. body {
  10. display: flex;
  11. flex-direction: column;
  12. align-items: center;
  13. }
  14. .msg-container {
  15. display: flex;
  16. flex-direction: column;
  17. width: 400px;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <form>
  23. <input type="text" id="login" placeholder="Name" />
  24. <input type="text" id="message" placeholder="Message" />
  25. <button id="btn">Send</button>
  26. </form>
  27. <div class="msg-container"></div>
  28. <script>
  29. const url = "http://students.a-level.com.ua:10012";
  30. const msgContainer = document.querySelector('.msg-container');
  31. const login = document.querySelector('#login');
  32. const message = document.querySelector('#message');
  33. const btn = document.querySelector('#btn');
  34. let messageId = 0;
  35. async function jsonPost(url, data) {
  36. try {
  37. const response = await fetch(url, {
  38. method: "POST",
  39. body: JSON.stringify(data),
  40. });
  41. const result = response.json();
  42. return response.ok ? result : new Error("status is not 200");
  43. } catch (error) {
  44. return new Error("jsonPost failed");
  45. }
  46. }
  47. async function sendMessage() {
  48. jsonPost(url, {
  49. func: "addMessage",
  50. nick: login.value,
  51. message: message.value,
  52. });
  53. }
  54. async function getMessages() {
  55. let a = await jsonPost(url, {
  56. func: "getMessages",
  57. nick: login.value,
  58. message: message.value,
  59. messageId: messageId,
  60. });
  61. let msgArray = a.data;
  62. msgArray.forEach(msg => {
  63. const text = document.createElement("p")
  64. messageId = a.nextMessageId;
  65. text.innerHTML = `(ID:${messageId}) ${msg.nick}: ${msg.message}`
  66. msgContainer.prepend(text)
  67. });
  68. }
  69. btn.onclick = async function sendAndCheck(e) {
  70. e.preventDefault();
  71. await sendMessage()
  72. await getMessages()
  73. }
  74. const delay = (ms) => new Promise((resolve) => setTimeout(() => resolve(ms), ms));
  75. (async function checkLoop() {
  76. while (true) {
  77. await delay(3000);
  78. getMessages();
  79. }
  80. })();
  81. //async function sendMessage(nick, message) отсылает сообщение.
  82. //async function getMessages() получает сообщения и отрисовывает их в DOM
  83. //async function sendAndCheck() использует две предыдущие для минимизации задержки между отправкой сообщения и приходом их.Именно эта функция должна запускаться по кнопке.
  84. //async function checkLoop() использует delay и бесконечный цикл для периодического запуска getMessages().
  85. </script>
  86. </body>
  87. </html>