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

$wordを選択して追加し、配列に追加することで配列内のアイテムを操作する予定な$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プロパティと、単語を説明する新しいプロパティの2つのプロパティがあります。次に、単語の値を単語の説明に置き換えて、順序付けされていないリストを更新します。

編集:

オブジェクトのプロパティをループする場合は、次のように実行できます。

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を介してそのJSONを取得する必要があります

$.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 に答える