分配给变量时,Request.ServerVariables“ ..”返回未定义,但可以通过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"

我正在将JScript用于Classic ASP。我不确定此时该做什么。有人可以帮忙吗?

谢谢

解决方法

在JScript中使用ASP的情况与在VBScript中使用ASP的情况有些不同。

由于所有内容都是JavaScript中的对象,因此var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR")会获得对象引用而不是字符串值,因为像其他大多数Request集合一样,ServerVariables是{ {1}}个对象

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

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

IStringList
,

我解决了获取IP地址的问题,而JScript的真实性/虚假性是一个完全而彻底的噩梦。

if (!String.prototype.isNullOrEmpty) {
        String.isNullOrEmpty = function(value) {
            return (typeof value === 'undefined' || value == null || value.length == undefined || value.length == 0);
        };
}

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

function getIPAddress() {
        try {
            if (String.isNullOrEmpty(ipAddress)) {
                ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR");
            }
            
            if (String.isNullOrEmpty(ipAddress)) {
                ipAddress = Request.ServerVariables("REMOTE_ADDR");
            }
            
            if (String.isNullOrEmpty(ipAddress)) {
                ipAddress = Request.ServerVariables("HTTP_HOST");
            }
        } catch (e) {
            Response.Write("From getIPAddress(): " + e.message);
            hasErrors = true;
        } finally {
            return ipAddress;
        }
}


    ipAddress = getIPAddress();
    Response.Write("ipAddress = " + typeof ipAddress + " " + ipAddress + "<br />\n\n");     // produces "object localhost"