将JSON数组显示为html列表
我想显示我从PHP服务器获取的JSON数组,作为HTML中的列表。我使用的代码循环遍历数组,但是当我用变量替换数组时它不起作用。将JSON数组显示为html列表
$(document).ready(function(){
\t $(document).bind('deviceready', function(){
\t \t //Phonegap ready
\t \t onDeviceReady();
\t });
\t var ownproducts = $('#ownproducts');
\t $.ajax({
\t \t url: 'MYURL',
\t \t dataType: 'jsonp',
\t \t jsonp: 'jsoncallback',
\t \t timeout: 5000,
\t \t success: function(data, status){
\t \t \t $.each(data, function(i,item){
\t \t \t \t var products = '<br>'+item.item;
\t \t \t \t var ul = $('<ul>').appendTo('body');
\t \t \t \t var json = { items: ['Banana','Cherry','Apple','Strawberry','Pear','Pineapple'] };
\t \t \t \t $(json.items).each(function(index, item) {
\t \t \t \t \t ul.append($(document.createElement('li')).text(item));
\t \t \t \t });
\t \t \t \t
\t \t \t
\t \t \t \t ownproducts.append(products);
\t \t \t });
\t \t },
\t \t error: function(){
\t \t ownproducts.text('Error Message');
\t \t }
\t });
});
所以我从我的数据库中包含数据的JSON文件,item.item包含数组但是当我替换此:
var json = { items: ['Banana','Cherry','Apple','Strawberry','Pear','Pineapple'] };
为:
var json = { items: item.item };
或者:
var json = { items: products };
它不起作用(不显示任何JavaScript相关的东西)。
编辑: 我试图通过PHP
<?php
header('Content-type: application/json');
require 'config.php';
$con = mysqli_connect($url,$username,$password,$database);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$userid = $_GET['userID'];
mysqli_select_db($con, $database);
$sql = "SELECT shoppingListID AS id, shoppingListUserID AS userid, shoppingCheckBox AS checkbox, shoppingItem AS item, shoppingDate AS date
FROM shoppinglist
WHERE shoppingListUserID='$userid'
ORDER BY shoppingDate DESC";
$result = mysqli_query($con,$sql) or die ("Query error: " . mysqli_error());
$records = array();
while($row = mysqli_fetch_assoc($result)) {
$records[] = $row;
}
mysqli_close($con);
echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';
?>
的ShoppingItem field包含["Tomatos","Apples","Mangos","Bananas"]
的SQL阵列从一个单一的用户返回多个shoppinglists得到从我的数据库的一些项目,我想上显示shoppinglists与列表中的每个列表的项目卡片。
有人有什么建议吗?我很感激帮助。
让我假设你的JSON端点事实上确实返回正确的数据 - 在这种情况下访问你“已经标示MYURL
什么生成文本(我相信!):
jsoncallback({"items":["Banana","Cherry","Apple","Strawberry","Pear","Pineapple"]})
然后我们可以移动在你的逻辑,其中包括在这个回调函数:?
function (data, status) {
$.each(data, function (i, item) {
var products = "<br>" + item.item;
var ul = $("<ul>").appendTo("body");
var json = {
items: ["Banana", "Cherry", "Apple", "Strawberry", "Pear", "Pineapple"]
};
$(json.items).each(function (index, item) {
ul.append($(document.createElement("li")).text(item));
});
ownproducts.append(products);
});
}
什么是这里的问题有很多,第一是,你可能不应该是迭代过data
,因为这是不是你的阵列。相反,你应该迭代超过data.items
。
第二个是你应该创建HTML而不是创建大量的DOM东西。你可以用香草JS的Array.prototype.map
或Array.prototype.join
功能,而不是委托这JQuery的:它是JS规范的一部分,这是充分的:
function (data, status) {
var html = '<ul><li>' + data.items.join('</li><li>') + '</li></ul>';
$(html).appendTo('body');
}
这不是真正的增加节点的最好方法,附加它们是昂贵的一点,最好在循环之外进行,参见http:/ /allthingscraig.com/blog/2012/09/28/best-practice-appending-items-to-the-dom-using-jquery/ and http://www.bennadel.com/blog/2281-jquery-appends-多元件-使用高效的文档片段。htm – Basic
首先感谢您的快速回复。我刚开始使用JavaScript,所以我不知道做什么是最好的方式。如果我正确理解你,你说我可以用'data.items.join'函数替换:'function(data,status){}'? –
@StefSpakman是的,第二个“盒子”是代码的第一个“盒子”(来自您的帖子)的替代替代品:它们都定义了匿名函数。我的一般建议是,如果你“刚刚开始”,就是要明白JavaScript中没有太多“魔力”。学习不同类型的东西,你可以用'typeof'来询问:typeof“x”==“string”','typeof function(){} ==“function”'等等。学习[environment]( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects)。 –
你确定你从数据库中获取正确的JSON? 'item'键是否存在?控制台中是否有任何错误? – Cristy
为什么不做'$ .each(json.items,function(index,item){'而不是'$(json.items).each(function(index,item){' – VIDesignz
)另外,你不应该使用'item '两次,因为它们是嵌套循环 – VIDesignz