首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Request.ServerVariables("..")赋值给变量时返回undefined,但其值可以通过Response.Write("..")显示

Request.ServerVariables("..")赋值给变量时返回undefined,但其值可以通过Response.Write("..")显示
EN

Stack Overflow用户
提问于 2020-09-05 06:37:44
回答 2查看 192关注 0票数 0

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

代码语言:javascript
运行
复制
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 for Classic ASP。在这一点上,我不确定该怎么做。有人能帮上忙吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-09-06 02:33:02

使用JScript的ASP和使用VBScript的ASP有一点不同。

因为在JavaScript中一切都是对象,所以使用var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR")可以获得对象引用而不是字符串值,因为与大多数其他Request集合一样,ServerVariablesIStringList对象的集合

因此,要使短路求值像您所期望的那样工作,您需要处理值,而不是对象引用。

如果存在值(键存在),则可以使用Item方法返回IStringList对象的字符串值,否则返回一个Empty值,该值在JScript中的计算结果为undefined

代码语言:javascript
运行
复制
var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR").Item || 
                Request.ServerVariables("REMOTE_ADDR").Item || 
                Request.ServerVariables("HTTP_HOST").Item; 
票数 2
EN

Stack Overflow用户

发布于 2020-09-06 00:52:53

我解决了获取IP地址的问题,JScript的真假是一场彻头彻尾的噩梦。

代码语言:javascript
运行
复制
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"
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63748751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档