表单提交后Javascript重定向无法正常工作。 Asp Classic,Javascript

时间:2015-03-06 11:11:21

标签: javascript html asp-classic

好吧,经过几个小时的研究和尝试,我现在完全被困住了。我为一个网页编写了很多代码,所以我会尝试尽可能地总结它。

所以我有这个ASP CLASSIC页面,用户可以使用表单创建一个票证。 编码页面由3个主要部分组成:

  1. Javascript客户端错误处理。
  2. 提交后的ASP CLASSIC服务器端错误处理(检查是否 数据库值存在,如电子邮件)。
  3. 表单提交(发送电子邮件+将数据插入到 数据库)。
  4. 提交表单后,会出现一些ASP错误处理。遇到错误时,将显示一个Javascript弹出框,其中包含错误,数据提交和电子邮件正在取消。

    表单自动填充输入的值(使用asp代码),以便在出错后输入的值保存在表单中。这一切都有效。

    表单代码:

    <div align="left"><form name="myForm" method="post" style="display:inline" onsubmit="return(validate());"> 
    
    
        <div class="FormTitel">Voor welke afdeling is de ticket bestemd?
        </div>
    
    
        <div class="radio">
        <input type="radio" class="radio" name="automatisering" value="Automatisering" checked <% if Request.Form("automatisering") = "Automatisering" then response.write("checked")%>>Automatisering
        <input type="radio" class="radio" name="automatisering" value="Software" <% if Request.Form("automatisering") = "Software" then response.write("checked")%>>Software
        <div id="Error1" style="display:none" color="white"></div>
        </div>
    
    
        <div class="FormTitel">Soort ticket
        </div>
         <div class="radio">
        <input type="radio"  class="radio" name="probleem" value="Probleem" <% if Request.Form("probleem") = "Probleem" then response.write("checked")%>>Probleem
        <input type="radio" class="radio" name="probleem" value="Wijziging"<% if Request.Form("probleem") = "Wijziging" then response.write("checked")%>>Wijziging
        <div id="Error2" style="display:none" color="white"></div>
        </div>
    
        <div class="FormTitel">Uw gegevens
        </div>
        <div>   
        <input type="text" name="Name" class="name" placeholder="Vul hier uw voor- en achternaam in" style="color:#888;" 
        onfocus="inputFocus(this)" onblur="inputBlur(this)" value="<%=Request.Form("Name")%>">
        <div id="Error3" style="display:none" color="white"></div>
        </div>
        <div>       
        <input type="text" name="EMail" class="name" placeholder="Vul hier uw emailadres in" style="color:#888;" 
        onfocus="inputFocus(this)" onblur="inputBlur(this)" value="<%=Request.Form("EMail")%>"/>
        <div id="Error4" style="display:none" color="white"></div>
        </div>
    
        <input type="submit" class="ticketVerstuur" value="Verstuur ticket" />  
            </form></div>
    

    *错误ID是验证返回false(使用javascript)时显示的客户端样式框。 *很抱歉没有翻译标题,名称等,但这将是一些工作;)

    表单中的ASP IF语句确保返回输入的值,并在显示错误时不丢失。

    现在好了,因为它出错了。

    提交后,If Request.ServerVariables("REQUEST_METHOD") = "POST" Then正在激活某些内容。即,正在为sql注入参数化输入值,例如,在服务器端检查一些输入值;提交的电子邮件是否存在于数据库中?如果服务器端验证都很好,那么数据将被插入数据库并正在发送电子邮件。

    服务器端的错误消息将作为javascript弹出框显示给用户。这有效。

    javascript弹出代码:

    function popup(popup,container) {
    
            var thisPopup = this;            
    
            thisPopup.load = function() {            
    
                container.animate({
                    "opacity": "0.3"  
                },250, function() {            
                    popup.fadeIn("250");            
                });    
    
                container.off("click").on("click", function() {
                    thisPopup.unload();
                }); 
    
                $('#closePop').off("click").on("click", function() {            
                    thisPopup.unload();             
                });                              
            }       
    
            thisPopup.unload = function() {            
    
                popup.fadeOut("250", function(){
                    container.animate({
                        "opacity": "1"  
                    },250);  
                });
            }
        } 
    

    在提交代码中调用该函数,如下所示:new popup($("#popup_box"),$("#container")).load();弹出div放在表单上方,容器包裹在表单周围。 (弹出工作)。

    问题是,在服务器端验证完全正常后,数据进入数据库并发送电子邮件,我弹出一个新的javascript框,说明一切都成功了。当它成功时我想清除我的表格(以避免混淆)。

    首先,我尝试使用response.redirect ("mypage.asp")执行此操作。虽然,当我使用它时,javascript弹出框不会显示。 然后我尝试在弹出框的关闭/卸载功能上使用window.location.replace("http://stackoverflow.com");,但这没有效果(数据未被清除)。还可以尝试在卸载弹出窗口时将var设置为true,然后稍后检查var是否设置为true(然后重定向),但这也不起作用,即使是直接的javascript重定向,所以没有弹出窗口,在提交代码中(毕竟成功)似乎没有因某种原因而起作用。事实上,只有警报似乎有效。这里是调整后的弹出窗口卸载示例:

        thisPopup.unload = function() {            
    
    window.location.replace("http://stackoverflow.com");
    
    popup.fadeOut("250", function(){
                        container.animate({
                            "opacity": "1"  
                        },250);  
                    });
                }
    

    那么是什么导致了这个问题,我该如何解决?我可以想象它需要更多的代码,所以不要犹豫,但是帖子足够大了。

    最后但并非最不重要的是我的代码设置方式的简短摘要:

    <html>
    <head>
        stylesheet
    <title></title>
    </head>
    <body>
    <javascript>
        Pop up box code + validate form code
    </javascript>
    <form>
    </form>
    </body>
    </html>
    
    <asp server side code (on submit)>
       Some functions (mail - anti injection) + request form values
       Validation server side (with javascript poups)
       Insert data in database
       Sending mail
    

1 个答案:

答案 0 :(得分:1)

我认为你在重定向方面处于正确的轨道上。要在重定向后显示弹出窗口,请执行以下操作:

response.redirect "mypage.asp?ShowSuccess=true"

然后在mypage.asp中使用:

<%
if request("ShowSuccess") = "true" then
    onload = "alert('Success message here!');"
end if
%>
<body onload="<%=onload%>">