我正在用PHP打印数组$_SESSION['words']
的<ul>
。
// PHP print new words as links
echo '<ul id="wordlist">';
foreach($_SESSION['words'] as $word => $description) {
echo '<li id="wordlist"><a href="#">' . $word . '</a></li>';
}
数组很简单 - 单词存储为键,单词的描述将是值,例如 array(5) { ["word1"]=> int(1) ["word2"]=> int(2) ["word3"]=> int(3) ["word4"]=> int(4) ["word5"]=> int(5) }
我计划通过选择一个$word
并添加一个$description
并将其添加到数组中来操作数组中的项目,所以我想我会使用 jQuery 来做到这一点。
我的问题是:如果我从这个PHP数组创建一个JSON数组,我可以以同样的方式打印出来并操作它吗?我用$myJSON = json_encode($_SESSION['words']);
编码了它,但我已经无法尝试从 JSON 打印出键/值!谢谢。。。
$.parseJSON
:
var json = $.parseJSON('your json');
alert(json.word1);
alert(json.word2);
如果您的 JSON 数据可通过 URL 获得,则可以使用$.getJSON
你的描述向我表明你没有以任何方式使用JSON,除了使用PHP的JSON编码功能。听起来就像您正在将PHP关联数组编码为JSON字符串,然后将该字符串写入HTML输出。如果是这种情况,那么你的JSON实际上是一个JavaScript对象。
因此,让我们假设生成的标记是这样的:
<script>
// Using a global here, which is not good,
// but this is an example.
var myWordList = {"word1":1,"word2":2,"word3":3};
</script>
<ul id="wordlist">
<li id="word1">1</li>
<li id="word2">2</li>
<li id="word3">3</li>
</ul>
请注意,我的 id 属性值是唯一的。您多次使用相同的 id 属性值;这是无效的标记。此外,对于此示例,我保持每个列表元素中的标记简单(只是文本)。
因此,给定此标记,我们可以编写以下 JavaScript:
<script>
// Update our wordlist object with some descriptions
myWordList.word1 = {
"value": myWordList.word1,
"description": "This is word 1."
};
myWordList.word2 = {
"value": myWordList.word2,
"description": "This is word 2."
};
myWordList.word3 = {
"value": myWordList.word3,
"description": "This is word 3."
};
// Now lets update the unordered list with jQuery
for (var i = 1; i < 4; i += 1) {
$('#word' + i).html(myWordList['word' + i].description);
}
</script>
在此 JavaScript 中,我首先通过为每个值分配一个新对象来更新myWordList
值。这些新对象有两个属性:分配了旧 myWordList.word#
值的 value
属性和描述单词的新 description
属性。接下来,我通过将单词值替换为单词描述来更新无序列表。
编辑:
如果要循环访问对象中的属性,可以执行以下操作:
for (var key in myWordList) {
if (myWordList.hasOwnProperty(key)) {
console.dir(myWordList[key]);
}
}
-
如果不习惯 $.each 方法,也可以尝试旧的数组循环:
$.ajax({ url: '', dataType: 'json', success: function(arrayData) { var i,max=arrayData.length; for(i=0;i<max;i++){ var rowItem = arrayData[i]; try{ console.log(rowItem.attr1); }catch(ex){ alert(ex);///in case data is not complete } }); } });
-
如果你已经有 JSON 字符串,比如 strJson = '[{attr1:"hello"},{attr1:"world"}]';
var tmp = 'var data = '+strJson; ///so you got : var data = [{attr1:"hello"},{attr1:"world"}] eval(tmp);/// execute the above line alert(data.length + "first item:"+data[0].attr1);
你需要通过 AJAX 和
$.ajax({
url: '',
dataType: 'json',
success: function(response) {
$.each(response, function(key, val) {
console.log(key); // word1, word2, word3...
console.log(val); // 1, 2, 3...
....
});
}
});