表单提交后 JavaScript 重定向不起作用。 Asp 经典、Javascript

标签 javascript html asp-classic

好吧,经过数小时的研究和尝试,我现在完全陷入困境。我为网页编写了很多代码,因此我将尽力对其进行总结。

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

  1. Javascript 客户端错误处理。
  2. 提交后 ASP CLASSIC 服务器端错误处理(检查是否 数据库值像电子邮件一样存在)。
  3. 表单提交(发送电子邮件+将数据插入到 数据库)。

提交表单后,会进行一些 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注入(inject),例如,某些输入值正在服务器端进行检查;数据库中是否存在提交的电子邮件?如果服务器端验证一切正常,则数据将被插入数据库并发送电子邮件。

服务器端的错误消息以 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

最佳答案

我认为您的重定向方向是正确的。要在重定向后显示弹出窗口,请执行以下操作:

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

然后在 mypage.asp 中使用:

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

关于表单提交后 JavaScript 重定向不起作用。 Asp 经典、Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897573/

相关文章:

JavaScript setInterval 和 setTimeout

javascript - 使用jquery(不是javascript)在 anchor 标记内附加html

javascript - promise 内的 forEach 循环内的 promise ,糟糕的 firebase 数据库设计?

Javascript-JQuery : sliding menu going left-to-right?

asp.net - 将 ASP.NET 与 ASP 混合

javascript - 关于Javascript闭包的问题

html - 当有垂直导航栏/侧边栏时,如何使文本居中?

javascript - 如何使用 jQuery 预加载图像

sql - 使用 ADODB.Command.Execute 设置 CursorType

javascript - 如何将服务器端 ASP XmlHttpRequest 代码转换为客户端 JavaScript?