【问题标题】:Server-Side JS in ASP implicationsASP 中的服务器端 JS 含义
【发布时间】:2016-04-09 16:46:53
【问题描述】:

我试图在一个经典的 ASP 网站中使用 JavaScript 作为脚本语言。 我遇到了几个错误。许多 JS 对象和一些常量都不起作用。有人可以解释使用 JavaScript 作为服务器端脚本语言的含义吗?这是我第一次尝试使用 JavaScript 驱动的 asp 网站,所以我提供了这段代码。

<%
var user = Request.QueryString("name");
Response.Cookies("thisUser") = user;

var expdate = new Date(Date.now().setMinutes(Date.now().getMinutes()+5));
Response.Cookies("thisUser").Expires = expdate.toString();

function _greet(name) {
    Response.Write("<p>And also you... <b>" + name + "</b> ...I guess...</p>");
}

%>
<!doctype html>
<html>
<head><title>ASP</title></head>
<body>
<%
Response.Write("<p>Hello World!</p>");
if (user != undefined) {
    _greet(user);
}
%>
</body>
</html>

_greet() 始终运行,无论 user 是否未定义。 expdate.toString() 由于未返回日期类型的字符串而导致内部服务器错误。它只返回数字,不支持toDateString()!有没有办法在 ASP 中调试 JavaScript?

附:我已经在服务器管理器(IIS 8.5)中将默认语言设置为 JavaScript。另外,我只是作为一个 Intranet 站点进行测试。

【问题讨论】:

  • 我已经看到我的问题在其他网页中起作用。也许我缺少一些配置。

标签: javascript asp-classic global-variables environment-variables server-side


【解决方案1】:

如果你要检查cookie是否被设置,你必须读取cookie并检查它是否真的在设置的5分钟内过期。

.Expires 设置似乎期望日期格式为yyyy-MM-dd H:m 格式。(我不确定这是否是它接受的唯一格式,您可以尝试不同的变体)

<%@ Language= "JavaScript" %> 
<%

var user = Request.QueryString("name");

//set the cookie only if it is not undefined
if(user+"" != "undefined")
{
    //write the name to cookie
    Response.Cookies("thisUser") = user;

    var fiveMinutesLater = new Date();
    fiveMinutesLater.setMinutes(fiveMinutesLater.getMinutes() + 5);

    //Response.Cookies("thisUser").Expires seems to expect the date in yyyy-MM-dd H:m format
    var formatteddate= fiveMinutesLater.getFullYear()+ "-" +("0" + (fiveMinutesLater.getMonth()+ 1)).slice(-2)+ "-" + ("0" + fiveMinutesLater.getDate()).slice(-2)+ " " + ("0" + fiveMinutesLater.getHours()).slice(-2)+":"+("0" + fiveMinutesLater.getMinutes()).slice(-2)

    Response.Cookies("thisUser").Expires = formatteddate;   
}


function _greet(name) {
    Response.Write("<p>And also you... <b>" + name + "</b> ...I guess...</p>");
}
%>
<!doctype html>
<html>
<head><title>ASP</title></head>
<body>
<%
Response.Write("<p>Hello World!</p>");

//Read the cookie.
var thisUser = Request.Cookies("thisUser");

if (thisUser != "") {
    _greet(thisUser);
}
%>
</body>
</html>

【讨论】:

  • 为什么undefined 无法识别?
  • 当我在浏览器控制台上查看到期日期时,它是格林威治标准时间。这是正常的吗?但它是脚本中的系统语言环境时间。
【解决方案2】:

首先,变量user 永远不会在您的if 块中未定义,因为您在此处定义它:

var user = Request.QueryString("name");

它可能是 null 或空字符串,但不是未定义的。所以只需执行这样的检查:

if ((user + "").length > 0) {
    _greet(user);
}

这会检查长度,只有当有东西时才会执行函数。


其次,Cookie 实例的.Expires 属性无论如何都应该获取日期,而不是字符串。只需删除 .toString() 调用,它应该可以工作:

Response.Cookies("thisUser").Expires = expdate;

【讨论】:

  • 我第一次尝试,但没有成功。我也尝试过使用toDateString()toUTCString() 进行格式化,但这些也不起作用。
猜你喜欢
  • 2016-06-26
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多