【问题标题】:Redirect in coldfusion -- Or Mandatory Javascript?在coldfusion中重定向——还是强制Javascript?
【发布时间】:2014-09-30 12:39:40
【问题描述】:

有谁知道如何在coldfusion中进行重定向,类似于javascript中的重定向?我在使用 javascript 时遇到的问题是人们只是关闭了 javascript。还有可能写一些东西来强迫他们要么保持 javascript 开启,要么让他们在没有 javascript 的情况下下载它?

<script language="javascript">
function SelectRedirect(){
// ON selection of section this function will work
//alert( document.getElementById('pcount').value);

switch(document.getElementById('pcount').value)
{
case "0":
alert('Please select number of owners.');
window.location="";
break;

case "1":
window.location="One/ownerInfo1.cfm";
break;

case "2":
window.location="Two/ownerInfo2.cfm";
break;

case "3":
window.location="Three/ownerInfo3.cfm";
break;

  case "4":
  window.location="Four/ownerInfo4.cfm";
break;

case "5":
window.location="Five/ownerInfo5.cfm";
break;

}// end of switch 
}
////////////////// 
</script>
</head>

<h3>How many owners are taking title?&nbsp;
<SELECT id="pcount" NAME="pcount">
<Option value="0">Select Section</option>
<Option value="1">1</option>
<Option value="2">2</option>
<Option value="3">3</option>
<Option value="4">4</option>
<Option value="5">5</option>
</SELECT></h3>


<input type="submit" name="Submit" value="Next" onClick="SelectRedirect();">

【问题讨论】:

  • 仅供参考,客户端javascript 内置于大多数浏览器中。这不是你下载的东西。由于浏览器安全限制,您不能强制客户端通过服务器端代码启用它。您可以做的最好的事情是表明该网站需要 javascript via &lt;noscript&gt; or other methods

标签: javascript redirect coldfusion coldfusion-10


【解决方案1】:

也有可能写一些东西来强迫他们要么保持 javascript 或者如果他们没有的话让他们下载它?

不,这是不可能的,您唯一能做的就是在未检测到 JS 时阻止输出,并在 &lt;noscript&gt; 块中通知您的访问者,但我认为这是非常糟糕的做法。以一种可以在开启和关闭 JS 时使用的方式构建您的应用程序。

话虽如此,你应该从无 JS 版本开始,不显眼地添加 JS 功能。例如。将 &lt;select&gt;&lt;input type="submit"&gt; 包装在 &lt;form&gt; 中,其中 action 以服务器端操作为目标,然后才添加 JS 作为一种性能提升器,但永远不要单独依赖 JS。

快速代码示例:

<cfif structKeyExists(url, 'pickPage') and structKeyExists(form, 'pcount')>
    <cfswitch expression=#form.pcount#>
        <cfcase value="0">
            <cfoutput>Error</cfoutput>
        </cfcase>
        <cfcase value="1">
            <cflocation url="One/ownerInfo1.cfm">
        </cfcase>
    </cfswitch>
</cfif>

<form action="?pickPage" method="post">
    <SELECT id="pcount" NAME="pcount">
    <Option value="0">Select Section</option>
    <Option value="1">1</option>
    </SELECT>
    <input type="submit" name="Submit" value="Next" onclick="SelectedRedirect(); return false;">
</form>

<script type="text/javascript">
function SelectRedirect() {
    switch (document.getElementById('pcount').value) {
        case "0":
            alert('Please select number of owners.');
            window.location = "";
            break;

        case "1":
            window.location = "One/ownerInfo1.cfm";
            break;

    }
}
</script>

【讨论】:

  • 据我所知,您没有设置 pickPage 参数,您的选择会将“pcount=1”等添加到 url。您还应该使用 method="post" 提交表单。
  • @AndreasSchuldhaus 谢谢你是对的,只是想在表单中使用?pickPage 参数来通知CF该表单已提交。此外,这只是一个简单的示例,所以我并不真正关心 GET 或 POST。编辑了我的回复
  • 没什么,只是一个非正式的参数,让CF知道这个表单是用户触发的。
  • 您是否也更新了应用程序中的代码?我在第一个版本中出错并切换了#url.pickPage# 而不是#url.pcount#
  • 如果您想使用 POST,您还需要更改变量的范围。在这种情况下,url 变为 form
【解决方案2】:

请注意,这是一个服务器端重定向,但您可以在 cfscript 中使用:

location("url", addtoken, statusCode);

<cflocation
    url = "URL"
    addToken = "yes|no"
    statusCode = "300|301|302|303|304|305|307">

【讨论】:

  • 注意:addToken 属性默认为 true,但几乎没有理由它应该为 true。将其设置为 true 允许某人共享 URL 并“劫持”该用户会话。
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 2011-09-03
  • 2021-07-20
  • 2014-08-03
  • 2011-12-14
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多