Php 使用xmlhttp请求检索json格式的数据

Php 使用xmlhttp请求检索json格式的数据,php,javascript,jquery,json,Php,Javascript,Jquery,Json,我使用jQuery,这很容易做到,但我想将它改为常规javascript,因为我将在phonegap中使用它,我不想每次向服务器发出请求时都循环使用js框架。也许这不是离开jQuery的好理由,但似乎它会让一切变得更快。因此,我需要一些有关此代码的帮助: <body onload="init();"> <div id="daily"></div> <script> var xmlhttp = new XMLHttpRequest();

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

编辑:

因此,我的查询从我的数据库中选择整行,它位于一个数组中:

{“items”:[{“id”:“1”,“pic”:“topic”:“daily”,“article”:“\t\t\t\t\t\t\t\u0417…”,“link”:http://www....“,”文本内容“:…}]}”

我怎样才能只显示图片和文章而不显示所有其他垃圾?我必须修改我的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:

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


如果看不到您的JSON的确切外观,很难确定。但是,由于您正在编码数组,我怀疑更改了:

a.items

会成功的

编辑

我会:

document.getElementById('daily').innerHTML = JSON.stringify(a.items);
这将把你的对象转换成一个字符串,可以分配给一个元素的
innerHTML
。我不确定这是否正是你想要做的,但是当你找到你想用这个方法显示的元素时,应该可以

编辑2

您可以将PHP更改为只输出所需内容。但是,您也可以在JS中对其进行过滤:

a.items[0].pic

如果这些项没有按原样显示,您可以使用
stringify
方法,但您不需要这样做,因为这些项看起来是字符串


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

如果看不到JSON的确切外观,则很难确定。但是,由于您正在编码数组,我怀疑更改:

a.items

会成功的

编辑

我会:

document.getElementById('daily').innerHTML = JSON.stringify(a.items);
这将把你的对象转换成一个字符串,可以分配给一个元素的
innerHTML
。我不确定这是否正是你想要做的,但是当你找到你想用这个方法显示的元素时,应该可以

编辑2

您可以将PHP更改为只输出所需内容。但是,您也可以在JS中对其进行过滤:

a.items[0].pic

如果这些项没有按原样显示,您可以使用
stringify
方法,但您不需要这样做,因为这些项看起来是字符串


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

您应该在xmlhttp.responseText上执行console.log并发布您要返回的内容。在控制台中,我获取一整组数据并对其进行编码。例如:{“items”:[{“id”:“1”,“pic”:“主题”:“每日”,“文章”:\t\t\t\t\t\t\t\t\t\t\t\u0417\u0434\u0440\u0430\u…您应该在xmlhttp.responseText上执行console.log并发布您得到的内容。在控制台中,我得到了一整组数据并对其进行了编码。例如:{“items”:[{“id”:“1”,“pic”:“主题”:“daily”,“article”:“\t\t\t\t\t\t\t\t\t\t\t\u0417\u0434\u0440\u0430\u…当我添加零时,它会给我一个“未定义的项”。保持原样会给我[object]。您需要查看哪些信息来帮助我了解更多?@user2025469是的,这是一个很好的预感,但不是正确的答案,我有一个想法,我将添加到我的答案中作为编辑。我将编辑我的答案,因为现在我将获得该行中所有内容的输出…我需要帮助首先显示数组的某个部分。不要放弃我!:)该死的…什么都不管用。我尝试了所有组合,结果要么是未定义,要么是无法读取未定义的属性pic,要么是其他错误。我迷路了…@marteljin我添加了完整的PHP文件…你能看看我是如何发回数据的吗…可能有什么问题吗?当我添加0时,它会给我一个“未定义项”.让它保持原样给了我[反对]。您需要查看哪些信息来帮助我了解更多?@user2025469是的,这是一个很好的预感,但不是正确的答案,我有一个想法,我将添加到我的答案中作为编辑。我将编辑我的答案,因为现在我将获得该行中所有内容的输出…我需要帮助首先显示数组的某个部分。不要放弃我!:)该死的…什么都不管用。我尝试了所有的组合,结果要么是未定义,要么是无法读取未定义的属性图片,要么是其他一些错误。我迷路了…@marteljin我添加了完整的PHP文件…你能看看我是如何发送数据回来的吗…可能有问题吧?