通过JS/AJAX将JSON数据转换为PHP [英] JSON data through JS/AJAX into PHP

查看:92
本文介绍了通过JS/AJAX将JSON数据转换为PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目标: 我正在使用coinmarketcap.com API (链接). 事先 ,我将他们的数据导入了PHP.样本:

Goal: I'm using the coinmarketcap.com API (link). Beforehand I got their data into PHP. Sample:

<?php
$url = "https://api.coinmarketcap.com/v1/ticker/?convert=EUR";
$response = file_get_contents($url);
$obj = json_decode($response,true);
print_r($obj);
?>

现在,我想使用AJAX/JS来获取实时数据.现在,我得到了以下JS代码:

Now I want to use AJAX/JS to get live data. I now got the following JS code:

<p id="collect"></p>
<script>
function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange=function() {
    if (this.readyState == 4 && this.status == 200) {
        var obj = JSON.parse(this.responseText);
        document.getElementById("collect").innerHTML = obj;
    }
  };
  xhttp.open("GET", "https://api.coinmarketcap.com/v1/ticker/?convert=EUR" + Math.random(), true);
  xhttp.send();
}

(function() {
   loadDoc()
})();
setInterval ( "loadDoc()", 5000 );
</script>

输出:

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

^输出.我还尝试了不带JSON.parse的上述代码,但它为我提供了所有内容的一串字符串.

^ the output. I also tried the above code without the JSON.parse but it gave me one string of everything.

问题::如何将上述实时数据返回到PHP数组中?我是这个的新手,但是我已经尝试了好几天.

Question: How can I get the above live data back into a PHP array? I'm quite the newbie to this but I have tried for several days.

推荐答案

不可能将数据写回PHP,因为PHP是在服务器端进行评估的,而客户端仅获得其结果页面. 但是这是一个仅在客户端运行的JavaScript解决方案:

Writing data back to PHP is not possible afaik because PHP is evaluated on serverside and the client just gets its resulting page. But here is a solution with JavaScript, which is only running on the client side:

您应该知道结果看起来像这样:

As you should know your result looks something like this:

[
{
    "id": "bitcoin", 
    "name": "Bitcoin", 
    "symbol": "BTC", 
    "rank": "1", 
    "price_usd": "17391.5", 
    "price_btc": "1.0", 
    "24h_volume_usd": "15047800000.0", 
    "market_cap_usd": "291076752838", 
    "available_supply": "16736725.0", 
    "total_supply": "16736725.0", 
    "max_supply": "21000000.0", 
    "percent_change_1h": "-0.14", 
    "percent_change_24h": "3.75", 
    "percent_change_7d": "45.85", 
    "last_updated": "1513104255", 
    "price_eur": "14834.288623", 
    "24h_volume_eur": "12835201583.6", 
    "market_cap_eur": "248277409254"
}, 
....
]

这是一个对象数组,其中每个对象都包含以下属性(id,name,symbol,...,market_cap_eur).

It's an Array of objects where each object contains the following properties (id, name, symbol, ... , market_cap_eur).

要显示所有这些内容,您需要遍历数组并为对象创建某种显示模板.

To display all those you would need to loop through the array and create some kind of dispalytemplate for the objects.

因此,您应该在已注册的onreadystatechange-function中替换以下代码行:

Therefore you should replace the following line of code in the registered onreadystatechange-function:

document.getElementById("collect").innerHTML = obj;

类似:

var objlength = obj.length;
var element = document.getElementById("collect");
element.innerHTML = "";
for ( var i = 0; i < objlength; i++){
    element.innerHTML += JSON.stringify(obj[i])+"<br />";
}

这将在新行中为每种加密货币创建一个字符串化结果. 结果仍然是不可读的,并且设置innerHTML的代码确实很脏. 为了进一步增强显示效果,您可以执行以下操作:

This would create a stringified result for each cryptocurrency in a new line. The result of it will still be unreadable and the code to setup the innerHTML is really dirty. To enhance atleast the display even more, you could do something like:

var objlength = obj.length;
var element = document.getElementById("collect");
element.innerHTML = "";
for ( var i = 0; i < objlength; i++){
    element.innerHTML += obj[i].name+" is "+ obj[i].price_eur +"<br />";
}

,应返回货币名称和每行当前的欧元价格. 您可以将其扩展为所有所需的属性.

which should return the name of the curreny and the current EUR price per line. You can extend this by all desired properties.

但是如上所述,它又快又脏,请不要用此代码来判断我.

But as mentioned it's quick and dirty and please don't judge me by this code.

此外,您还需要删除请求中的+ Math.Random(). 这是一个有效的实时示例: http://plnkr.co/edit/aHXFVAjH6qoKk2vmOf0u?p=preview

Also you need to delete the + Math.Random() in you request. Here is a working live example: http://plnkr.co/edit/aHXFVAjH6qoKk2vmOf0u?p=preview

这篇关于通过JS/AJAX将JSON数据转换为PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆