Javascript JSON数据通过JS/AJAX转换成PHP

Javascript JSON数据通过JS/AJAX转换成PHP,javascript,php,json,ajax,Javascript,Php,Json,Ajax,目标: 我正在使用coinmarketcap.com API事先我将他们的数据输入PHP。样本: <?php $url = "https://api.coinmarketcap.com/v1/ticker/?convert=EUR"; $response = file_get_contents($url); $obj = json_decode($response,true); print_r($obj); ?> ^输出。我还尝试了上面没有JSON.parse的代码,但它给了我一个

目标: 我正在使用coinmarketcap.com API事先我将他们的数据输入PHP。样本:

<?php
$url = "https://api.coinmarketcap.com/v1/ticker/?convert=EUR";
$response = file_get_contents($url);
$obj = json_decode($response,true);
print_r($obj);
?>
^输出。我还尝试了上面没有JSON.parse的代码,但它给了我一个字符串

问题:如何将上述实时数据恢复到PHP数组中?我是这方面的新手,但我已经尝试了好几天。

PHP代码

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


因为URL返回JSON数据,所以已经

将数据写回PHP是不可能的,因为PHP是在服务器端进行计算的,而客户端只获取其结果页面。 但这里有一个JavaScript解决方案,它只在客户端运行:

您应该知道,您的结果如下所示:

[
{
    "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、名称、符号、…、市值)

要显示所有这些,您需要在数组中循环并为对象创建某种类型的dispalytemplate

因此,应替换已注册onreadystatechange函数中的以下代码行:

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 />";
}
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 />";
}
var objlength=obj.length;
var元素=document.getElementById(“collect”);
element.innerHTML=“”;
对于(变量i=0;i”;
}
这将在新行中为每个加密货币创建字符串化结果。 它的结果仍然是不可读的,并且设置innerHTML的代码非常脏。 要进一步增强显示效果,您可以执行以下操作:

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 />";
}
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 />";
}
var objlength=obj.length;
var元素=document.getElementById(“collect”);
element.innerHTML=“”;
对于(变量i=0;i”;
}
应返回货币名称和每行当前欧元价格。 您可以通过所有所需的属性来扩展它

但正如前面提到的,它又快又脏,请不要用这个代码来判断我

您还需要删除请求中的+Math.Random()。
下面是一个正在运行的示例:

是否应该改为
JSON.stringify()
?你试图在HTML中插入一个JSON对象,这肯定会失败!“返回到PHP数组”为什么,您在JS上?@MattFletcher stringify返回一个字符串,并包含大量“\n”之类的内容。我想把它全部输出到页面上,这样我的PHP就可以收集它了。有没有关于我应该怎么做的建议?你的编码倒过来了。您需要在php中对json\u进行编码,使其成为json字符串,而不是php对象。然后简单地回显它(不使用
print\r
)。然后在客户端脚本上,您不需要做任何事情。如果您打算将json作为对象进行处理(我假设您这样做),那么请使用json.Parse,但如果您只是想让json简单地用从服务器获得的json字符串替换您的innerHTML。我不能说我理解“PHP可以收集它”的含义。但是,如果要对字符串进行htmlify,可以使用
obj.replace('\n','
')
。JSON天生就不太可靠,它会返回我页面上的所有数据。现在让我们假设我想循环通过这些数据来打印特定的值?例如,比特币的名称?很抱歉回复太晚。您可以使用
json\u decode
函数对json进行解码,然后foreach循环遍历结果。非常感谢您的输入。在我问题的第一个脚本中,我将它们的数据保存在PHP数组中。但是,此数据不是实时数据(必须手动刷新)。你有没有建议我如何通过PHP数组获取他们的实时数据?@derrtyones很抱歉,我不是PHP开发人员,但在我看来,PHP的目的不是周期性地将值写回其数据模型。它是一种极快的Web开发语言,将在服务器上进行评估,因此很难破解。在PHP中使用数组,您希望最终实现什么?您是对的。你的例子也教会了我很多,我相信我现在可以取得进步。我还有一些存储在MySQL数据库中的数据(例如,某个用户拥有多少特定加密的硬币)。我想把这些数据和我们刚刚通过JS收集的数据一起使用。@dertyons实际上你可以做一些非常肮脏的事情。您可以使用javascript强制每5秒钟重新加载一次PHP网页,并使用当前PHP代码检索数据并将其写入SQL。下面是重新加载location.reload()的Javascript函数;。