1

我使用的是 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>

获取mainnews.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\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 和 must 是数组,所以我猜 responseText 是一个多维数组?这是我显示它的问题吗?

编辑 3:

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

控制台日志

4

1 回答 1

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 更改为您要定位的项目的索引。

于 2013-07-28T15:01:36.730 回答