-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 "or "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 回答