如何用Javascript从另一个网站捕获脚本的响应(它返回纯文本)?

时间:2018-07-31 19:53:49

标签: javascript html json

所以我正在使用以下外部脚本。

<script type="application/javascript" src="https://api.ipify.org"> </script>

它以纯文本形式答复客户端IP地址。我尝试使用available JSON响应类型使其工作,并且可以通过回调捕获数据。但是,当我尝试仅获取纯文本时,无法解决如何解析此数据的问题,只是不断出现“意外数字”错误。是否可以检索信息并将其存储而无需回调?

3 个答案:

答案 0 :(得分:1)

您正在尝试将纯文本作为JavaScript代码加载。不要那样做浏览器将尝试解析为JavaScript并执行响应,然后由于语法不正确而引发错误。

相反,请使用各种AJAX API,该API允许您向端点发出请求并使用数据。

例如,使用fetch()

fetch("https://api.ipify.org")
  .then(res => res.text())
  .then(data => console.log(data));

还有许多其他方法可以发出AJAX请求:

以及其他所有可以做相同事情的方式。要了解的基本知识是,您需要发出请求以获取资源,而不是尝试将其作为JavaScript文件加载。

答案 1 :(得分:1)

最简单的方法是将其请求为JSONP,它提供了回调函数。

<script type="text/javascript" src="https://api.ipify.org/?format=jsonp&callback=someName"></script>

在加载时,它将在窗口范围内调用一个名为someName的函数,该函数将接收一个具有属性ip的对象。

当然,有更好的方法。例如,jQuery的$.ajax支持JSONP(别名$.getJSON),并具有成功/失败处理程序,fetch()等。

答案 2 :(得分:1)

是的,您可以使用此脚本获取IP

async function getIP() {
    try {
        const res = await fetch('https://api.ipify.org?format=json');
        const jsonObj = (res.json()).then(data => alert(data.ip));
    } catch (err) {
        console.error(err);
    }
}

getIP();

我希望我明白了你的意思并回答了你。