【问题标题】:How can I differentiate between a freshly loaded form and the same form loaded after redirection如何区分新加载的表单和重定向后加载的相同表单
【发布时间】:2014-06-11 08:05:53
【问题描述】:

我有一个包含以下字段的登录表单 -
用户名
密码
退货失败
直接登录
当我点击提交时,所有字段都附加在 URL 中,并点击 JSP 文件。
在此之后,
场景一:登录成功,跳转到成功页面。这工作
场景2:如果登录失败,则重定向到作为参数传递的返回失败URL值。重定向时没有任何响应。
问题 -
1. 如何区分加载新表单和重定向后加载的表单?
2. 我必须在将页面重定向到返回失败值之前而不是在重新加载表单期间显示用户名和密码无效的警告。我该怎么做?

Below is the code -  
**HTML**  

    <form name="formlogin" method="get" onsubmit="return ValidateForm();" class="form-wrapper">
    <table>
    <tr>
        <td>
            <label class="service-lable" style="font-family:Verdana;">Username</label>
        </td>
        <td>
            <input type="email" name="username" maxlength="30" size="30" class="required"/> <br/><br/>
       </td>
    </tr>
    <tr>
        <td>
            <label class="service-lable" style="font-family:Verdana;">Password</label>
        </td>
        <td>
            <input type="password" name="password"maxlength="30" size="30" class="required"/> <br/><br/>
        </td>
    </tr>
    <tr>
        <td>
            <input type="hidden" name="directlogin" id="directlogin" value="1"/>
        </td>
        <td>
            <input type="hidden" name="returnfailure" id="returnfailure" value="http://www.google.com"/>
        </td>
    </tr>
    <tr>
        <td>
            <input type="submit"  name="login" value="" class="button_add" />
        </td>
    </tr>
    </table>
    </form>

**Javascript**  

        <script>
            function emailcheck(str) {
                var at="@";
                var dot=".";
                var lat=str.indexOf(at);
                var lstr=str.length;
                var ldot=str.indexOf(dot);


                if (lat ==-1 || lat == 0 || lat == lstr){
                    return false;
                }
                if (ldot==-1 || ldot==0 || ldot == lstr){
                    return false;
                }

                if (str.indexOf(at,(lat+1))!=-1){
                    return false;
                }

                if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
                    return false;
                }

                if (str.indexOf(dot,(lat+2))==-1){
                    return false;
                }

                if (str.indexOf(" ")!=-1){
                    return false;
                }
                return true;                    
            }

            function ValidateForm(){
                var emailID=document.forms["formlogin"].username;
                var username=document.forms["formlogin"].username.value;
                username=username.toLowerCase();
                var password=document.forms["formlogin"].password.value;



                if ((emailID.value==null)||(emailID.value == "")){
    //      alert("Please Enter your Email ID");
            emailID.focus();
            return false;
                }
                if (emailcheck(emailID.value)== true){
                    document.forms["formlogin"].action = "http://www.test.com/login.jsf";
            return true;
                } else {
                    alert ('Please enter the valid Email ID');
            return false ;

                }
            }
        </script>

【问题讨论】:

  • 您是否使用任何服务器端语言..?
  • @TJ 不,我没有使用

标签: javascript html forms redirect


【解决方案1】:

TJ 走在正确的轨道上。通常在这里,您希望服务器能够在页面加载时(即使是第一次)将表单的内容以及错误传递给客户端。如果您想完全在客户端执行此操作,也许您可​​以让表单提交代替 javascript ajax 请求。然后,javascript 可以解释服务器响应,然后使用错误消息填充页面或重定向到成功页面。

【讨论】:

  • 没有服务器端 - 是否可以获得重定向元数据?否则使用 cookie。或者可能更喜欢在&lt;input type='hidden' id='LstLoginAttempt'/&gt; 的行中隐藏,并将其设置在ValidateForm 中。
  • 我想我只会在成功登录的情况下重定向。否则显示警告并保留表单数据。如果您想跟踪登录尝试,那么在服务器端进行操作会更加安全,一旦发生这种情况,让服务器发送“登录次数过多”错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2011-07-21
相关资源
最近更新 更多