微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

d3通过PHP读取代理数据的方法

在现有的SO文献中,我看到过使用jqueryPHP代理数据的示例:

jQuery的

function loadTheUrl(x){      
    $.ajax({ url: 'loader.PHP',
         data: {url: x},
         type: 'get',
         success: function(output) {
                      $('.loading-space').html(output);
                  }
            });

  } 

PHP

<?PHP
$doc = new DOMDocument();
$doc->loadHTML(file_get_contents($_GET['https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o']));
echo $doc->saveHTML();

以下是上面PHP中看到的URL的前几行数据.它只是一个纯文本页面,如下所示:

MARKET_OPEN_MINUTE=570
MARKET_CLOSE_MINUTE=960
INTERVAL=300
COLUMNS=DATE,OPEN
DATA=
TIMEZONE_OFFSET=-240
a1521120900,555.45
1,554.53
2,554.07
3,553.9
4,552.67
...

据我所知,PHP是正确的.对于我的用例,我需要通过d3复制上面的jquery.我希望d3可以用来与我的PHP文件吐出的数据进行交互.

如果你想知道为什么我会这么长,那是因为我的浏览器不让我直接通过说d3.text(‘https://)运行脚本(即d3.text(),d3.csv()等等). www.google.com/finance …’)由于臭名昭着的访问控制原始标题错误.所以我的计划是将谷歌回填中的数据镜像到我从服务器上提供的本地PHP文件中.这样每个人都很开心(或者至少是我).

当我尝试在我的PHP文件调用d3.text()时,我的数据未正确加载.换句话说,我尝试过:d3.text(‘my_loader.PHP’).但是这导致了很多NaN错误,我通常注意到它们是某种解析错误的症状.通过我的代码检查,事情似乎很好.我有一元解析,字符串应该转换为数字.事实上,一切都在线下工作.我可以在IDE中直接加载和解析数据.只有当我将d3图表发布到网络上时才意识到我无法解析来自不同来源的数据.这是我添加PHP组件的地方.我的预感是d3实际上是在试图解析我的PHP页面,而不是PHP指向的URL.我后来通过在控制台中传递d3.text()返回的数据来确认这一点,它确实是PHP页面本身.

问题:根据我的跨源数据情况,我可以从d3端或PHP端做什么来使两个接口正确连接?我想知道d3是否只适用于相同的原始数据,或者是否存在使用我不知道的技术(PHP或其他方法)读取/解析跨源数据的方法.

解决方法:

您正在获取的URL在$_GET变量中不存在.

您提交的参数是一个数组:

$_GET = ['url' => 'some_url'];

这意味着:

$_GET['https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o]

是错的(它也错过了字符串末尾的引号).

它应该是$_GET [‘url’]

没有验证:

<?PHP
header('Content-Type: text/plain');
echo file_get_contents($_GET['url']);

但这既不是在这里也不是在那里.

我认为,问题在于网址被传递.它包含一个问号和多个&符号(?和&).我认为这是bjorking $_GET参数,所以你得到的只是https://www.google.com/finance/getprices?q=.NSEI.你需要在encodeURIComponent中包装url:

var url = encodeURIComponent('https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o');
d3.text('/path/to/myscript.PHP?url=' + url);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐