通过AJAX获取错误的IP地址,但直接在PHP API中更正

时间:2019-07-10 16:13:46

标签: javascript php ajax

我有以下PHP代码来获取客户端IP地址:

<?php

function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
echo json_encode(array('ip'=>getRealIpAddr()));

?>

当我直接或通过邮递员运行此API时,我会获得正确的IP地址,即我自己的IP地址。

我的AJAX代码:

var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function() {
                  if (this.readyState == 4 && this.status == 200) {
                        var getresponse = JSON.parse(this.responseText);
                        ipaddr = getresponse.ip;
                        console.log(ipaddr);
                  }  
            };
            xmlhttp.open("GET", "ipapi.php", true);
            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlhttp.send();

但是当我通过HTML中的AJAX调用此api时,得到的IP地址不正确。我在ajax中获得的最终IP地址是我的服务器(Hostgator服务器)的,而不是我自己的IP地址。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

在您的PHP示例中,您使用功能HTTP_CLIENT_IP获得了getRealIpAddr(),但是在ajax调用中,您仅使用ipapi.php作为URL。

您必须在此呼叫中输入完整的URL,例如:

xmlhttp.open("GET", "http://www.myAwesomeURL.com/getIpApi", true);

在此GET /getIpApi服务器上,必须返回函数getRealIpAddr()的结果,然后您才能在前端应用程序中使用它。