Php 使用xmlhttp请求检索json格式的数据
我使用jQuery,这很容易做到,但我想将它改为常规javascript,因为我将在phonegap中使用它,我不想每次向服务器发出请求时都循环使用js框架。也许这不是离开jQuery的好理由,但似乎它会让一切变得更快。因此,我需要一些有关此代码的帮助: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();
<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文件…你能看看我是如何发送数据回来的吗…可能有问题吧?