JavaScript/Ajax

생활코딩 Ajax 간단 정리 및 실습

공주맛밤 2022. 8. 10. 22:17

Ajax(Asyncoronous javascript and xml) : 필요한 정보만을 부분적으로 정교하게 낚아채는 낚시꾼
=> single page application에 대한 이해
*Ajax 보안 문제로 인해서 직접 실행할 수는 없고 웹서버에서 구동해야 한다.

(사견: Ajax와 react모두 single page application을 만드는 데 일조하는 공통점이 있지만 Ajax는 네트워크 통신을 통해서 필요한 데이터를 뽑아 온다면 react는 로컬 파일내에서 필요한 정보를 만들어 놓고 필요한 부분에서 꺼내쓰는 느낌인것 같다. 예로 react로 만드는 웹 페이지에서 게시글의 대한 정보를 다른 서버에서 가져와야 한다면 Ajax를 통해 가져오는 경우가 있다.)

[동적으로 컨텐츠 변경하기]

<실습>

<!DOCTYPE html>
<html>
  <head>
    <title>WEB1 - Welcome</title>
    <meta charset="utf-8" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="colors.js"></script>
  </head>
  <body>
    <h1><a href="index.html">WEB</a></h1>
    <input
      id="night_day"
      type="button"
      value="night"
      onclick="
    nightDayHandler(this);
  "
    />
    <ol>
      <li>
        <a
          onclick="
      document.querySelector('article').innerHTML = '<h2>HTML</h2>HTML is ...'"
          >HTML</a
        >
      </li>
      <li><a onclick="
        document.querySelector('article').innerHTML = '<h2>HTML</h2>HTML is ...'"
            >HTML</a
          >>CSS</a></li>
      <li><a href="3.html">JavaScript</a></li>
    </ol>
    <article></article>
  </body>
</html>
WEB1 - Welcome

WEB

  1. HTML
  2. HTML>CSS
  3. JavaScript

[fetch Api - 요청과 응답]

fetch('javascript') : 웹 브라우저야 'javascript'라는 파일을 서버에게 응답해줘.

.then(callbackme) : fetch Api야 응답이 끝나면 내가 지금부터 정의하는 callbackme라는 함수를 실행시켜줘
*비동기 작동 -> fetch의 응답이 시간이 걸리는데 그 시간동안 다른 코드들이 실행됨

callback함수를 fetch Api가 실행시킬 때 fetch의 응답이 담긴 'response 객체'를 함수의 첫번째 인자로 주게 되어 있음
*이름이 없는 함수: 익명 함수/ 여러 곳에 쓰이지 않고 한 곳에서 쓰이는 함수는 이름이 따로 필요 없음

<fetch 예제 실습>

<input onClick="fetch('html')" />

<input
      type="button"
      value="fetch"
      onclick=" 
    //   fetch('html')
    // .then(function(respon) { respon.text().then(function(text) {
    // document.querySelector('article').innerHTML=text; }) }) 
    function callbackme(){
        console.log('response end')
    }
    fetch('html').then(callbackme)
    console.log(1)
    console.log(2)
    ">

[Ajax의 적용]

<!DOCTYPE html>
<html>
  <head>
    <title>WEB1 - Welcome</title>
    <meta charset="utf-8" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="colors.js"></script>
  </head>
  <body>
    <h1><a href="index.html">WEB</a></h1>
    <input
      id="night_day"
      type="button"
      value="night"
      onclick="
    nightDayHandler(this);
  "
    />
    <ol>
      <li>
        <a
          onclick="
            fetch('html')
            .then(function(respon) { respon.text().then(function(text) {
            document.querySelector('article').innerHTML=text; }) }) "
          >HTML</a
        >
      </li>
      <li>
        <a
          onclick="
            fetch('css')
            .then(function(respon) { respon.text().then(function(text) {
            document.querySelector('article').innerHTML=text; }) }) "
          >CSS</a
        >
      </li>
      <li>
        <a
          onclick="
        fetch('javascript')
        .then(function(respon) { respon.text().then(function(text) {
        document.querySelector('article').innerHTML=text; }) }) "
        >
          JavaScript</a
        >
      </li>
    </ol>
    <article></article>
  </body>
</html>

[hash] : 한 페이지에서 특정한 부분으로 접근할 때 url를 통해서 도달하고 싶다면! => Single Page Application에서 특정부분으로 바로 이동하기 위함

id=three -> /page#three : reload없이 id = "three"인 곳으로 스크롤이 이동
*frangment: id가 가리키는 조각
*location.hash를 통해 id값을 가져올 수 있음

#!(해쉬뱅)html : hash와 구별하기 위해 관습적으로 !을 붙임

그러나 검색엔진에 최적화 되어 있지 않음 => Pjax

<hash 실습>

<!DOCTYPE html>
<html lang="en">
  <body>
    <p>
      Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque
      ratione odit labore. Fugit blanditiis, ipsa ducimus quaerat cum alias
      atque maiores quae ex fuga perspiciatis, praesentium voluptatibus laborum!
      Minus, eum. Ipsa neque, atque ullam quam ea facere optio nobis dignissimos
      inventore a voluptatibus amet pariatur placeat maxime perspiciatis vero
      error vel cum fuga iste. Necessitatibus, eligendi ullam! Nihil dolorum ea
      adipisci labore dolor, suscipit magnam, atque molestiae autem sapiente
      mollitia, earum quidem possimus dignissimos sint alias numquam non qui sed
      nisi. Magnam dolore non, voluptates consequatur nulla perspiciatis ipsa
      ipsam tenetur ut temporibus labore at corrupti consectetur in. Sapiente,
      error.
    </p>
    <p>
      Lorem ipsum dolor sit amet consectetur adipisicing elit. Minus facere
      pariatur debitis iusto quia soluta repellendus quae repudiandae nobis
      sapiente, reiciendis expedita similique consectetur ullam mollitia velit
      nulla! Sequi impedit optio facilis culpa ut, odit quia officia voluptate
      dolorum delectus dicta repellendus rerum commodi obcaecati quidem
      quibusdam debitis tenetur expedita voluptates, facere, officiis aliquid
      consectetur eius. Deserunt reiciendis quia eius pariatur cumque
      consectetur laudantium, optio iure tenetur sit itaque excepturi numquam
      est blanditiis, animi ut assumenda quidem similique quos. Omnis architecto
      blanditiis, dicta quae autem nulla illo qui sed commodi cum porro
      consequuntur labore velit ipsa voluptate est, quidem nisi?
    </p>
    <p id="three">
      Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsam error dolor
      quas dicta aut minima sequi fugit corporis? Aut velit aliquam excepturi
      rerum sequi iure ea, quia magni, aperiam odit quasi tenetur tempora esse
      repellendus possimus. Laboriosam nostrum magnam placeat, similique
      accusantium sunt necessitatibus repellendus tenetur ab amet repudiandae
      minus labore expedita odio eveniet soluta alias assumenda! Dolorem facilis
      asperiores optio alias? Provident, labore voluptatem? Quos quod quis,
      ullam quisquam nemo vitae, facere nulla necessitatibus natus nisi
      distinctio odio cum voluptas dignissimos accusamus, iste dolor. Similique
      laborum sapiente laboriosam enim. Placeat ratione commodi, minus illo
      praesentium rem aperiam nesciunt autem!
    </p>
    <script>
      if (location.hash) {
        console.log(location.hash.substr(1));
      }
    </script>
  </body>
</html>

[fetch Api polyfill] : fetch가 적용이 안되는 오래된 웹브라우저에서 fetch를 쓸 수 있게끔 해줌
*polyfill: 최신 기술을 지원하지 않는 웹브라우저에서 사용하게끔 해주는 것

주소나 파일을 다운받아서 <script scr="파일 주소" ></script>를 통해서 사용

https://github.com/lhj0954/WEB3-Ajax.git

 

GitHub - lhj0954/WEB3-Ajax: 생활코딩 ajax

생활코딩 ajax. Contribute to lhj0954/WEB3-Ajax development by creating an account on GitHub.

github.com

 

728x90
반응형