js原生请求远程ip库url得到的数据如何处理?

发布于 2022-09-11 20:54:51 字数 2047 浏览 38 评论 0

先说下我要实现的功能:写1个js,纯js,不掺杂后端语言的情况下实现

外国IP访问网站不跳转,国内IP指定地方不跳转,其他地区都跳转

我的解决思路是:
找到了1个ip库,前端页面中用
<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
访问,结果得到了浏览器ip

ip = returnCitySN.cip;  //获得设备ip

然后想通过var url = "http://freeapi.ipip.net/"+ip; 这个接口ajax get方式访问得到他的数据
访问目标站的数据格式是:

["中国","天津","天津","","鹏博士"]

很奇怪就是得不到我想要的效果,贴上代码,希望有人能指点我一下,不甚感激。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
</head>
<body>
<script type="text/javascript">
ip = returnCitySN.cip;  //获得设备ip
var url = "http://freeapi.ipip.net/"+ip;
var request = new XMLHttpRequest()
request.onreadystatechange = function () { // 回调
 if (request.readyState === 4) { // 成功
  if (request.status == 200) { 
   alert(request.responseText) // 这个打印不出来数据?
  } else {
   console.log(request.status)
  }
 }
}

// GET 请求
request.open('GET',url)
request.send()
alert(request.responseText)//这个也打印不出来数据?
</script>
</body>
</html>

另外我在这个案例中(http://www.w3school.com.cn/ti...)也尝试了将
下面onclick里的参数由他自带的

/example/xdom/note.xml

换成我想的

http://freeapi.ipip.net/120.227.44.221

然后提交代码,访问还是获取不了,不知道问题出在哪里?

像这种接口

http://pv.sohu.com/cityjson?ie=utf-8

它很好,它是返回来了1个js的代码语句

var returnCitySN = {"cip": "120.227.44.221", "cid": "CN", "cname": "CHINA"};

我很容易就在js里使用了它返回的数据

但是像这个接口

http://freeapi.ipip.net/120.227.44.221

它返回的是个框框[]数据

["中国","湖南","长沙","","移动"]

我该如何处理它?
另外我在我的网站里使用ajax请求别的网站的数据,这是属于ajax跨域请求这个概念吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

赤濁 2022-09-18 20:54:51

有如下几个问题:

1 第三方的接口返回的类型 Content-Type: application/json;charset=utf-8 是如下:
图片描述
` http://freeapi.ipip.net/120.227.44.22
2 XMLHttpRequest 默认 responseType="text", 这里是接收不到值
3 尝试这指定 request.responseType = "json", 发现第三方接口并没有支持跨域.

    request.open('GET',url)
    request.responseType="json" 添加这句,浏览器提示错误如下(跨域了)
    request.send();

图片描述

解决方案推荐: 用代理(nginx或nodejs自己写服务), nodejs我测试了是可行的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文