首页 > 解决方案 > Request.ServerVariables("..") 在分配给变量时返回 undefined 但其值可以通过 Response.Write("..") 显示

问题描述

我正在尝试检索用户的 IP 地址并将其分配给一个变量:

var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR") || 
                Request.ServerVariables("REMOTE_ADDR") || 
                Request.ServerVariables("HTTP_HOST"); 

Response.Write(Request.ServerVariables("HTTP_HOST") + "<br />\n\n");    // produces "localhost"
Response.Write(Request.ServerVariables("REMOTE_ADDR") + "<br />\n\n");  // produces "::1"
Response.Write(Request.ServerVariables("HTTP_X_FORWARDED_FOR") + "<br />\n\n"); // produces "undefined"
Response.Write("ipAddress = " + typeof ipAddress + " " + ipAddress + "<br />\n\n");     // produces "ipAddress = object undefined"

我正在为经典 ASP 使用 JScript。我不确定此时该做什么。任何人都可以帮忙吗?

谢谢

标签: asp-classicjscript

解决方案


使用 JScript 在 ASP 中的工作与使用 VBScript 的 ASP 有点不同。

由于 JavaScript 中的一切都是对象,因此var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR")您将获得对象引用而不是字符串值,因为与大多数其他Request集合一样,它ServerVariablesIStringList对象的集合

因此,要使短路评估按预期工作,您需要使用值,而不是对象引用。

如果有值(键存在),您可以使用返回对象Item的字符串值的方法IStringList,否则返回一个在 JScriptEmpty中评估的值。undefined

var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR").Item || 
                Request.ServerVariables("REMOTE_ADDR").Item || 
                Request.ServerVariables("HTTP_HOST").Item; 

推荐阅读