1

我正在用 PHP 打印一个<ul>数组$_SESSION['words']

    // 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) }

我计划通过选择 a$word并添加 a$description并将其添加到数组中来操作数组中的项目,所以我想我会使用 jQuery 来完成它。

我的问题是:如果我从这个 PHP 数组创建一个 JSON 数组,我可以用同样的方式打印出来并对其进行操作吗?我对其进行了编码,$myJSON = json_encode($_SESSION['words']);但我已经尝试从 JSON 中打印出键/值!谢谢...

4

4 回答 4

2

您可以使用$.parseJSON

var json = $.parseJSON('your json');
alert(json.word1);
alert(json.word2);

如果您的 JSON 数据可通过 URL 获得,您可以使用$.getJSON

于 2012-06-02T15:53:50.580 回答
1

您的描述向我表明,除了使用 PHP 的 JSON 编码功能之外,您没有以任何方式使用 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通过为每个值分配一个新对象来更新这些值。这些新对象有两个属性:一个value分配了旧myWordList.word#值的属性,以及一个description描述单词的新属性。接下来,我通过将单词值替换为单词描述来更新无序列表。

编辑:

如果要遍历对象中的属性,可以这样做:

for (var key in myWordList) {
  if (myWordList.hasOwnProperty(key)) {
    console.dir(myWordList[key]);
  }
}
于 2012-06-02T16:10:38.723 回答
1
  1. 如果不习惯 $.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
           }
        }); 
      } 
    });
    
  2. 如果您已经有了 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);
    
于 2012-06-02T16:00:50.707 回答
0

您需要通过 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...
       ....
    });
  }
});
于 2012-06-02T15:50:23.643 回答