使用xmlhttprequest检索json格式的数据

时间:2013-07-28 14:23:21

标签: php javascript jquery json

我正在使用jQuery,这很容易完成,但我想将其更改为常规javascript,因为我将使用phonegap并且我不想在每次向服务器发出请求时循环遍历js框架。也许这是离开jQuery的一个坏理由,但似乎它会让一切变得更快。所以我需要一些关于这段代码的帮助:

<body onload="init();">
  <div id="daily"></div>

<script>
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState === 4 && xmlhttp.status === 200){
      var a = JSON.parse(xmlhttp.responseText);
      document.getElementById('daily').innerHTML = a.items;
    }
  };
  xmlhttp.open("GET", serviceURL +"getmainnews.php" , true);
  xmlhttp.send();
  }
</script>

getmainnews.php

//mysqli query
$daily = array();
while ($r = mysql_fetch_assoc($day)){
  $daily[] = $r;
}
echo json_encode(array("items" => $daily, "allitems" => $mainnews,...));

在Chrome DT中,我可以看到返回的编码数据,但我无法将第一个项目显示在我的第一个div中,其中id =“daily”。使用我提供的代码,我得到的只是[object,Object]。我做错了什么?

编辑:

所以我的查询从我的数据库中选择整行,它在一个数组中:

{“items”:[{“id”:“1”,“pic”:“”,“topic”:“daily”,“article”:“\ t \ t \ t \ t \ t \ t \吨\吨\吨\吨\ u0417 ... “” 链接 “:” HTTP:// WWW .... “” text_cont “:...”}]}

如何在没有其他垃圾的情况下显示图片和文章?我是否必须修改我的php文件?

编辑2:

$day = mysql_query("SELECT pic, article, link FROM table WHERE topic='daily' ORDER BY id DESC LIMIT 1");
$daily = array();
while ($r = mysql_fetch_assoc($day)){
$daily[] = $r;
}

$exc = mysql_query("SELECT pic, article, link FROM table WHERE topic='exclusive' ORDER BY id DESC LIMIT 1");
$excl = array();
while ($e = mysql_fetch_assoc($exc)){
$excl[] = $e;
}

$mus = mysql_query("SELECT pic, article, link FROM table WHERE topic='must' ORDER BY id DESC LIMIT 1");
$must = array();
while ($m = mysql_fetch_assoc($mus)){
$must[] = $m;
}
echo json_encode(array("items" => $daily, "exc" => $excl, "must" => $must));

这是我的查询完整的php文件。 Items,exc和必须是数组,所以responseText,我想,是一个多维数组?这是我在显示它时遇到的问题吗?

编辑3:

console.log(a.items)给了我一个“未定义”,所以我记录了xmlhttp.responseText。

Console Log

1 个答案:

答案 0 :(得分:1)

如果没有确切了解您的JSON的样子,很难确定。但是,由于您正在编码数组,我怀疑是在改变:

a.items

a[0].items

会做到这一点......

修改

我愿意:

document.getElementById('daily').innerHTML = JSON.stringify(a.items);

这会将您的对象转换为可以分配给元素innerHTML的字符串。我不确定这是否正是您想要做的,但是当您发现要使用该方法显示的元素时应该有效。

修改2

您可以将PHP更改为仅输出您想要的内容。但是,您也可以在JS中过滤它:

a.items[0].pic

a.items[0].article

如果那些没有按原样显示,您可以使用stringify方法,但您不需要,因为这些项目似乎是字符串。

另请注意,如果您有多个项目,则需要将0更改为您要定位的项目的索引。