【问题标题】:PHP script retrieves a JSON file - How do I pass it to JavaScript?PHP 脚本检索 JSON 文件 - 如何将其传递给 JavaScript?
【发布时间】:2016-04-05 04:11:40
【问题描述】:

假设我有一个为我检索 JSON 数据的 PHP 脚本:

<?php
    header('Content-Type:application/json; charset=utf-8'); 
    $url = "http://ipinfo.io/" . $_SERVER['REMOTE_ADDR'] . "/json";
    echo file_get_contents($url);

如何在 JavaScript 中解析这些数据?

【问题讨论】:

  • 听起来像是 CORS 问题而不是广告拦截
  • @Pamblam 只有激活了某些 AdBlock 设置的用户才会阻止我的内容。 stackoverflow.com/questions/34529007/…
  • 您想从 Web 服务器中提取它,然后将其作为 JSON 推送到客户端浏览器,以便将其解析为可以迭代元素的实际对象吗?

标签: javascript php


【解决方案1】:

因此,查看数据样本,我们看到 URL:

http://ipinfo.io/104.111.103.12/json

演出:

{
  "ip": "104.111.103.12",
  "hostname": "a104-111-103-12.deploy.static.akamaitechnologies.com",
  "city": "Cambridge",
  "region": "Massachusetts",
  "country": "US",
  "loc": "42.3626,-71.0843",
  "org": "AS35994 Akamai Technologies, Inc.",
  "postal": "02142"
}

因此:

<?php
    $sIP = $_SERVER['REMOTE_ADDR'];
    if ($sIP == '127.0.0.1') { // like testing at home on your own workstation
      $sIP = '104.111.103.12'; // use a dummy one just for this demo
    }
    $sURL = "http://ipinfo.io/" .$sIP . "/json";
    $sJSON = file_get_contents($sURL);
    $view = (object) array();
    $view->JSON = $sJSON;
?><!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<script type="text/javascript">

// global string of Data
var gsData = <?= $view->JSON ?>

$(document).ready(function(){
  var sRegion = gsData.region;
  $('#result').html(sRegion);
});

</script>
<div>Region from data is:</div>
<div id="result"></div>
</body>
</html>

...在我的家庭工作站网络服务器(当前 IP 为 127.0.0.1)上显示此结果:

Region from data is:
Massachusetts

现在,您要做的就是永远不要信任数据。假设一个黑客超越了 ipinfo.io 并且 JSON 不再变成 JSON,而是一些恶意的东西。这意味着它可以从客户端浏览器端将恶意代码插入您的网站,例如破坏网站或使其重定向到一些充满恶意软件的非常糟糕的网站。

在将数据发送到客户端浏览器之前,PHP 通过 Web 服务器将数据注入 HTML 中也可能存在潜在的漏洞(我不确定)。 Web 服务器中可能存在一个弱点(同样,不确定),其中可能会在那里完成缓冲区溢出,然后它可以将代码注入 Web 服务器,例如使其创建可以远程执行的文件。

因此,网络上有很多文章介绍如何在将数据发送到浏览器之前先对其进行润色和测试。这超出了您的问题范围,但要记住这一点非常重要。

这里有一些关于如何从 PHP 验证 JSON 的信息:

Validate json in php

【讨论】:

  • 谢谢!我正在一个新的 HTML 文件上测试你的代码,但没有得到预期的结果。输出:JSON = $sJSON; ?&gt; Region from data is:。 PHP 代码是否必须在 HTML 的正上方?我正在通过 localhost 对其进行测试。它必须保留在真实的网络服务器上吗?
  • 感谢最后的解释 - 非常有用。我将包含您的代码的 HTML 文件放在 cesare.io/test/test.html
  • 是的,它必须在真正的 Web 服务器上运行,但可以是本地主机。
  • 您必须将 .html 扩展名重命名为 .php 才能让 Web 服务器识别并运行 PHP 部分。
【解决方案2】:
<?php
$REMOTE_ADDR = "104.111.103.12";
$url = "http://ipinfo.io/" . $REMOTE_ADDR . "/json";
$data =  file_get_contents($url);
?>
<!doctype html>
<script>
var data = <?php echo $data;    ?>;
alert(data.ip);
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2010-11-23
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多