-1

Json コールバックで変数を定義したい。

コード;

$("select").change(function () {
          var $variable = "";
          $("select option:selected").each(function () {
                $variable += $(this).text() + " ";
              });
          $("div.yaz").text($variable);

      $('#result').html('loading...');

    $.getJSON('program-bilgileri.php', function(JSON){
        $('#result').empty();

        $.each(JSON.$variable, function(i, program){
            $('#result')
            .append(program.isim +'<br />')
            .append(program.bilgi+'<br />')
            .append(program.adres+'<hr />');
      });
    });
    })
    .trigger('change');

program-bilgileri.php が返されます。

{
   "programlar":[
      {
         "isim":"Zone Alarm",
         "bilgi":"bilgisayarın güvenliğini sağlar",
         "adres":"www.zonealarm.com"
      },
      {
         "isim":"Opera",
         "bilgi":"güvenli ve hızlı bir web tarayıcısıdır",
         "adres":"www.opera.com"
      },
      {
         "isim":"Photoshop",
         "bilgi":"güçlü bir imaj işleme yazılımıdır",
         "adres":"www.adobe.com"
      }
   ]
}

問題は、ここで「$.each(JSON.$variable, function(i, program)」です。JSON で $variable を定義すると、機能しません。

何か案が?

4

2 に答える 2

1

私が見る問題は

  • change使用しているイベント内で、変更された要素だけでなく、ページ内の$("select option:selected")すべての要素が検索されます。代わりに 使用してください。select
    $(this).children('option:selected')
  • 私はあなたがselect要素で複数の選択を許可していると仮定しています、そしてそれがあなたが..でやっている理由+=です$variableあなたは最後にスペースも追加しています)。ただし、これは、変数がまたはのようなものになることを意味し"programlar "ます"programlar somethingelse"。ただし、返されたJSONのキーはprogramlar。です。スペースなしの単一の単語..したがってJSON[$variable]、変数内の名前に基づいて要素にアクセスする正しい方法である場合、それは一致しません。

<select>要素が複数選択を許可しない場合、解決策は次のとおりです。

$("select").change(function() {
    var $variable = $(this).children("option:selected").text();

    $("div.yaz").text( $variable );

    $('#result').html('loading...');

    $.getJSON('program-bilgileri.php', function(JSON) {
        $('#result').empty();
        $.each(JSON[$variable], function(i, program) {
            $('#result')
                .append(program.isim + '<br />')
                .append(program.bilgi + '<br />')
                .append(program.adres + '<hr />');
        });
    });
}).trigger('change');

実際に複数選択であり、各オプションがJSONに表示される可能性がある場合は、変数にある各オプションを確認する必要があります。

$("select").change(function() {
    var $variable = $(this).children("option:selected").map(function(){
                           return $(this).text();
                    }).get();

    $("div.yaz").text( $variable.join(' ') );

    $('#result').html('loading...');

    $.getJSON('program-bilgileri.php', function(JSON) {
        $('#result').empty();

        for (index=0, length = $variable.length; index < length; index ++) {
            $.each(JSON[$variable[index]], function(i, program) {
                $('#result')
                    .append(program.isim + '<br />')
                    .append(program.bilgi + '<br />')
                    .append(program.adres + '<hr />');
            });
        }
    });
}).trigger('change');
于 2012-04-26T08:43:00.587 に答える
0

試す

$.each(JSON['programlar'], function(i, program) ... );

これにより、PHP から返された JSON オブジェクトのこの部分が繰り返されます。

  {
     "isim":"Zone Alarm",
     "bilgi":"bilgisayarın güvenliğini sağlar",
     "adres":"www.zonealarm.com"
  },
  {
     "isim":"Opera",
     "bilgi":"güvenli ve hızlı bir web tarayıcısıdır",
     "adres":"www.opera.com"
  },
  {
     "isim":"Photoshop",
     "bilgi":"güçlü bir imaj işleme yazılımıdır",
     "adres":"www.adobe.com"
  }
于 2012-04-26T06:50:23.527 に答える