Google 양식 맞춤설정으로 비동기 전송 [Ajax]

정적 사이트의 폼 구현 문제는 지금까지 수많은 뛰어난 웹 제작자들을 괴롭혀 온 문제 중 하나다.

방법은 다양하지만 솔직히 PHP 파일을 만지고 싶지 않아 ... 서버는 가지고 다른 것입니다.

이번 취재반은 ついにそのベストプラクティスを発見することに成功した。
전제 조건
  • jQuery 사용
  • 상당히 억지로 (법인 사이트보다 설문지 방향)

  • 목표: Google 설문지에서 정적 사이트의 설문지 이동



    이 기사를 읽고 할 수 있게 되는 것
  • Google 양식과의 연결
  • 송신 완료 후,이 페이지에 「문의 해 주셔서 감사합니다」라는 메시지를 낼 수있다
  • 썬크스 페이지로 전환 할 수 있습니다

  • Google 양식 만들기



    우선은 Google 양식을 작성한다.


    HTML 폼으로 만들 예정의 것과 당연히 같은 것을 만듭니다.

    input,textarea의 name의 값, form의 action처의 URL를 메모한다



    Chrome의 유효성 검사 기능으로 검색합니다.

    라디오 버튼만, 각 요소의 뒤에 마지막에 1개만 input가 있으므로 거기만 메모합니다.

    여기가 양식을 제출합니다.

    HTML 양식 작성


    
    <div class="form-wrapper">
        <form
          action="https://docs.google.com/forms/u/0/d/e/hoge"
          id="form">
          <div class="box">
            <label for="name">お名前</label>
            <input type="text" name="entry.396652" id="name" placeholder="お名前" required>
          </div>
          <div class="box">
            <label for="mail">メールアドレス</label>
            <input type="mail" name="entry.1934980" id="mail" placeholder="メールアドレス" required>
          </div>
          <div class="box">
            <p class="box">お好きなプログラミング言語</p>
            <div class="flex-box"><input type="radio" name="entry.1977612" required value="scala">
              <p>scala</p>
            </div>
            <div class="flex-box"><input type="radio" name="entry.1977612" required value="kotlin">
              <p>kotlin</p>
            </div>
            <div class="flex-box"><input type="radio" name="entry.1977612" required value="basic">
              <p>basic</p>
            </div>
    
          </div>
          <div class="box">
            <textarea name="entry.181178" id="" cols="30" rows="10" placeholder="自由記述"></textarea><!-- /# -->
          </div>
          <input type="submit" class="submit-btn">
        </form>
        <p class="end-message">お問い合わせありがとうございました</p>
        <p class="false-message">送信失敗です</p>
      </div>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    

    여기에서 google 양식과 동일한 내용의 HTML 양식을 만들고 name과 action의 값을 맞춥니다.
  • form 태그에 id="form"→form내의 input의 value를 취득하기 위해 id 지정(이름은 임의)
  • jQuery로드 → Ajax 사용을 위해

  • 이 근처는 나중에 필요하게 되기 때문에, 기술해 둡니다.

    제출해보기




    제출하면 ...




    오, 받을 수 있습니다! !
    그리고 여기서 감동해도 좋지만,いきなりこんなページに飛ばされるのは、ユーザビリティ的に問題があります。여기에서 ajax 구현으로, 이 화면으로 천이하지 않게 손을 더해 갑시다.

    문의 완료 메시지를 낸다.


    $(document).ready(function () {
    
          $('#form').submit(function (event) {
            var formData = $('#form').serialize();
            $.ajax({
              url: "https://docs.google.com/forms/u/0/d/e/hoge",
              data: formData,
              type: "POST",
              dataType: "xml",
              statusCode: {
                0: function () {
                  $(".end-message").slideDown();
                  $(".submit-btn").fadeOut();
                  //window.location.href = "thanks.html";
                },
                200: function () {
                  $(".false-message").slideDown();
                }
              }
            });
            event.preventDefault();
          });
    
        });
    
    

    우선 serializeでform内のinputのvalueを取り出しgormDataに代入그 후 urlにgoogleフォーム送信先(action)のurl記入그리고 jQueryのメソッドで送信後「完了メッセージ表示」마지막으로 event.preventDefault 에서 submit 이벤트를 무효화하고 천이시키지 않는다
    라는 흐름.


    전송 후 완료 메시지를 slideDown으로 표시할 수 있습니다.さりげに送信後submit-btnをfadeOutさせているところに、気配りを感じますよね?(二重投票防止)
    비동기에서도 데이터를 받을 수 있습니다. 뭔가 감동...

    썬크스 페이지 전환



    이쪽은 순간입니다.
    
    statusCode: {
                0: function () {
                  //$(".end-message").slideDown();
                  //$(".submit-btn").fadeOut();
                  window.location.href = "thanks.html";
                },
    

    window.location.href에서 보낸 후 thanks.html로 날아갑니다.


    css 쓰고 있지 않기 때문에, 페이지 천이하고 있는 느낌이 없습니다만, 일단 천이하고 있습니다 w



    이렇게하면 Google Forms의 집계 기능이 엄청납니다 ...

    문제점



    밸리데이션



    입력 필수 정도라면,
    
    <input type="text" required>
    

    처럼 required 사용하면

    데포에서 이와 같이 표시해 줍니다만, 밸리데이션은 프런트보다 서버 사이드(PHP)로 하는 것이 철판인 것 같기 때문에, 어떻습니까.

    교차 도메인 문제



    나도 자세하지 않지만 그런 문제가 있는 것 같다.

    h tps://아아안세 7. bgs포 t. 이 m/2019/01/오오gぇーふぉr마오오 sc로s. HTML

    동작하기 때문에, 치명적이라고는 생각하지 않습니다만, 에러를 검지할 수 없다든가.

    위탁 제작의 경우 상대방에게 양식을 만들어야합니다.



    Google 계정 정보를 받는 것은 번거롭기 때문에 상대방에게 양식을 만들어야 합니다.
    조금, 상대의 IT 리터러시가 필요할지도 모릅니다.

    [추가]: 메일 전송 기능을 구현하는 방법을 썼습니다.



    google 양식 제출 후 메일 제출 기능 구현 [Google Apps Script]

    참고 기사

    Google 양식을 맞춤설정하고 배포하고 Ajax 처리
    Google 양식을 자유롭게 맞춤설정

    자동 회신 기능 참고 기사
    Google 설문지를 사이트에 삽입하고 자동 회신 이메일 보내기 (1)

    좋은 웹페이지 즐겨찾기