Как динамически отображать или скрывать html в зависимости от ответа сервера

Я пытаюсь воспроизвести веб-сайт AMP, чтобы получить знания.

Технический стек: статический размещенный веб-сайт AWS S3, AWS Cloudfront, AWS EC2, AWS Elastic Beanstalk, Google Accelerated Mobile Pages (AMP), Flask, JWT, CORS, MongoDb

Существует страница home.html, содержащая кнопку для входа и кнопку для создать учетную запись. При нажатии любой кнопки открывается диалоговое окно и загружается страница login.html.

На странице login.html всегда отображаются поля ввода #create-container независимо от того, какая кнопка нажата.

Как динамически отображать или скрывать контейнеры в зависимости от ответа сервера? Есть ли способ эмулировать событие .click из ответа сервера? Могу ли я инициировать событие щелчка .showlogin из ответа сервера? Что должен вернуть ответ сервера, чтобы вызвать .showlogin?

Я попытался вернуть следующее из конечной точки фляги, которая вызывается при загрузке страницы входа:

return jsonify(
    {'.showlogin': 'click'}
), 200

home.html

<script id="amp-access" type="application/json">
  {
      "authorization": "https://example.com/auth?rid=READER_ID&url=CANONICAL_URL&clientId=CLIENT_ID(cart)&ref=DOCUMENT_REFERRER&_=RANDOM",
      "pingback": "https://example.com/auth?rid=READER_ID&url=CANONICAL_URL&clientId=CLIENT_ID(cart)&ref=DOCUMENT_REFERRER&_=RANDOM",
      "login": {
        "sign-in": "/login?rid=READER_ID&url=CANONICAL_URL&ref=DOCUMENT_REFERRER&_=RANDOM",
        "sign-up": "/sign-up?rid=READER_ID&url=CANONICAL_URL&ref=DOCUMENT_REFERRER&_=RANDOM"
      },
      "authorizationFallbackResponse": {
          "error": true,
          "auth": true,           
          "loggedIn": false
      }
  }
</script>

<button class="menu_button atsackers pt9" on="tap:amp-access.login-sign-in">sign in</button>
<button class="menu_button atsackers pt9" on="tap:amp-access.login-sign-up">create account</button>

login.html (стиль):

    #username-container {
      display: none;    
    }
    #password-container {
      display: none;
    }
    #login-container {
      display: none;
    }
    #create-container {
      width: 100vw;

    }
    #contactResponse {
      width: 250px;
      margin: 10px auto;
    }
    #create-form {
        display: flex;
        justify-content: space-around;
        flex-wrap: wrap;
        flex-direction: column;
        align-items: center;
        width: 100vw;
        margin: 0 auto;
        max-width: 550px;
    }
    .login_form {
      width: 250px;
      display: flex;
      flex-direction: column;
      justify-content: flex-start;
      align-items: center;
      margin: 0 auto 10px auto;
    }

login.html (скрипт)::

$(document).ready(function(){   
  $("#create").click(function(){
    console.log("create clicked");  
    $("#login-container").hide();
    $("#create-container").show();
  });
  $("#login").click(function(){
    console.log("login clicked");    
    $("#create-container").hide();
    $("#login-container").show();
  });   
  $("#reset_username").click(function(){
    console.log("reset username clicked");      
    $("#login-container").hide();
    $("#username-container").show();
  });
  $("#reset_password").click(function(){
    console.log("reset password clicked");        
    $("#login-container").hide();
    $("#password-container").show();
  });
  $(".showlogin").click(function(){
    console.log(".showlogin clicked");  
    $("#create-container").hide();
    $("#username-container").hide();
    $("#password-container").hide();
    $("#login-container").show();

  });
});


<script>
    //When the page has loaded.
    $( document ).ready(function(){
        //Perform Ajax request.
        $.ajax({
            url: 'https://example.api.com/get_create_info?clientId=' + getQueryStringValue("clientId"),
            type: 'get',
            success: function(data){
                $('#create_email_field').val(data.email);
                $('#create_firstname_field').val(data.firstName);
                $('#create_lastname_field').val(data.lastName);
                //If the success function is execute,
                //then the Ajax request was successful.
                //Add the data we received in our Ajax
                //request to the "content" div.
            }
        });
    });
</script>

login.html (тело):

<div id="contactResponse" class="avenir pt8"></div>

<div id="username-container" class="login_form">
<form id="username-form">
   ...inputs...
</form>
</div>

<div id="password-container" class="login_form">
<form id="password-form">
   ...inputs...
</form>
</div>

<div id="login-container" class="login_form">
<form id="login-form">
   ...inputs...        
</form>
</div>

<div id="create-container" class="login_form">
<form id="create-form">
   ...inputs...
</form>
</div>

person S.W.    schedule 28.07.2020    source источник


Ответы (1)


используйте методы jQuery hide и show в блоке успеха. Чтобы скрыть div, просто используйте $("#divId").hide();, а чтобы показать, используйте $("#divId").show();.

person Optimus    schedule 28.07.2020