查看下面的更新,主题关闭
我是新的服务器发送的事件,还没有在Javascript中使用Json(只有php)。我试图从每个对象获得数据,但它不会工作。foreach循环也可以
这是我读取Json的脚本:
<script>
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("json.php");
source.onmessage = function(event) {
var b = event.data.replace(/'/g, '"');
var obj = JSON.parse(b);
console.log(obj.AUDCAD.Bid);
};
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>
Javascript中收到的输出(event.data):
{ 'AUDCAD':[{'Bid':'0.92599', 'Color':'#9F0226', 'Proc':'+0.23%'}]}
{ 'AUDJPY':[{'Bid':'85.24575', 'Color':'#00652B', 'Proc':'-0.66%'}]}
{ 'AUDNZD':[{'Bid':'1.090025', 'Color':'#00652B', 'Proc':'+0.24%'}]}
{ 'AUDUSD':[{'Bid':'0.7078', 'Color':'#00652B', 'Proc':'-0.32%'}]}
{ 'CADJPY':[{'Bid':'91.97097', 'Color':'#00652B', 'Proc':'-0.82%'}]}
{ 'EURAUD':[{'Bid':'1.5778', 'Color':'#00652B', 'Proc':'+0.82%'}]}
{ 'EURCAD':[{'Bid':'1.4633', 'Color':'#9F0226', 'Proc':'+0.89%'}]}
{ 'EURCHF':[{'Bid':'1.09118', 'Color':'#9F0226', 'Proc':'-0.07%'}]}
{ 'EURCZK':[{'Bid':'27.0235', 'Color':'#9F0226', 'Proc':'+0.58%'}]}
{ 'EURGBP':[{'Bid':'0.738611', 'Color':'#9F0226', 'Proc':'+0.04%'}]}
{ 'EURJPY':[{'Bid':'134.6803', 'Color':'#9F0226', 'Proc':'-0.01%'}]}
{ 'EURUSD':[{'Bid':'1.1185', 'Color':'#9F0226', 'Proc':'+0.34%'}]}
{ 'GBPJPY':[{'Bid':'182.2945', 'Color':'#9F0226', 'Proc':'+0.01%'}]}
{ 'GBPUSD':[{'Bid':'1.5142', 'Color':'#00652B', 'Proc':'+0.34%'}]}
{ 'NZDUSD':[{'Bid':'0.6488', 'Color':'#9F0226', 'Proc':'-0.65%'}]}
{ 'USDCAD':[{'Bid':'1.3084', 'Color':'#00652B', 'Proc':'+0.54%'}]}
{ 'USDCHF':[{'Bid':'0.9754', 'Color':'#00652B', 'Proc':'-0.39%'}]}
{ 'USDJPY':[{'Bid':'120.39', 'Color':'#00652B', 'Proc':'-0.33%'}]}
由于错误,我在第5行用双引号替换了单引号。
我不确定我是否以正确的方式创建了Json,我只是在php中读取xml文件并为其创建了Json。
<?php //here runs a loop
{
echo"data: { '".$v->Symbol."':[{'Bid':'".$v->Bid."', 'Color':'".$cc."', 'Proc':'".$sign.$p."'}]}'n'n"; }
echo "retry: 10000'n'n"; ?>
我希望有人能帮助我,无论如何提前感谢
我现在正在使用这个,这就是我所需要的
<script>
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("json.php");
source.onmessage = function(event) {
var b = event.data.replace(/'/g, '"');
var obj = JSON.parse(b);
for(var key in obj){
console.log(key+' Bid:'+obj[key].Bid+' Color:'+obj[key].Color+' Proc:'+obj[key].Proc);
} };
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>
PHP echo"data: { '".$v->Symbol."':{'Bid':'".$v->Bid."', 'Color':'".$cc."', 'Proc':'".$sign.$p."'}}'n'n";
试试这个:
Object.keys(obj).forEach(function(key) {
tmp = obj[key][0];
Object.keys(tmp).forEach(function(k) {
console.log(k + ':' + tmp[k]);
});
});
你将遍历你收到的任何格式的数据
你好你的"AUDCAD"对象是数组在数组中你已经添加了对象所以你需要通过使用
来获取它obj['AUDCAD'][0]['Bid'];
{ 'AUDCAD':[{'Bid':
这不是JSON,会导致JSON.parse
出错。JSON中的字符串必须用"
分隔。'
是不可接受的。参见http://jsonlint.com/
在第5行我用双引号替换了单引号,因为有错误
从源头修复问题。不要在最后一刻才动手。您将遇到数据包含'
或"
作为实际数据的问题。
我不确定我是否以正确的方式创建了Json
不要通过混搭字符串来生成JSON。你会犯错误的。
使用数组等生成合适的PHP数据结构。然后通过json_encode
。
obj.AUDCAD.Bid
AUDCAD
是一个对象数组,而不是单个对象。
您需要在obj.AUDCAD[0].Bid
如果您想使用obj.AUDCAD.Bid
访问您的数据,请更改php代码
echo"data: { '".$v->Symbol."':{'Bid':'".$v->Bid."', 'Color':'".$cc."', 'Proc':'".$sign.$p."'}}'n'n"; }
(没有[]),否则你必须用obj.AUDCAD[0].Bid
访问它,因为obj.AUDCAD
是一个数组,里面有1个对象。
现在,要访问所有的数据,尝试一个for循环,像这样:
for(var key in obj)
console.log(obj[key].Bid)