3

我有这个 ajax 代码用于从 Jobs.json 文件中获取 json。

 $(document).ready(function(){
        $('#btn2').click( callJobs );
        });

function callJobs()
{


     alert("getting results...");
    $.getJSON('Jobs.json', function(JSON){
        $('#result').empty();

        $.each(JSON.jobs, function(i, JOB){
            $('#result')
            .append(JOB.Job +'<br />')
            .append(JOB.Priority+'<br />')
            .append(JOB.DueDate+'<br />')
            .append(JOB.Iscompleted+'<hr />');
      });
    });
}

Jobs.json 代码如下。

{
"jobs":[
  {
     "Job":"Job1",
     "Priority":"Low",
     "DueDate":"11.03.2013",
     "Iscompleted":"No"
  },
  {
     "Job":"Job2",
     "Priority":"High",
     "DueDate":"11.03.2013",
     "Iscompleted" : "No"
  },
  {
     "Job":"Job3",
     "Priority":"Medium",
     "DueDate":"11.03.2013",
     "Iscompleted":"No"
  }
  ]
  }

现在我想动态重写 $.each 函数。也就是说,它将 json 字符串写为键和值,而不是 .append() 。

4

2 回答 2

1

这将动态遍历每个作业的属性:

$.getJSON('Jobs.json', function(JSON){
    var $container = $('#result').empty();

    $.each(JSON.jobs, function(i, JOB) {
        $.each(JOB, function(key, value) {
            $container.append(key + ': ' + value + '<br />');
        });
        $container.append('<hr />');
    }
});

演示

于 2013-03-11T14:53:50.337 回答
1

这是我的方法。我添加了评论来解释这个过程。

$.each(JSON.jobs, function(i, JOB) {
    // an empty array for the output values
    var values = [];
    // iterator over each property in the current JOB object
    for (var prop in JOB) { 
        // add an item to the array in format "key: value"
        values.push(prop + ': ' + JOB[prop]); 
    }
    // join the array values using '<br />' as separator; 
    // append to #result and add an '<hr />' after
    $('#result').append(values.join('<br />')).append('<hr />');
});

我对这个解决方案的目标是保持它的可读性(以添加数组为代价),#result只选择一次元素,而不必处理知道是否<br />在每个循环中添加最后一个元素。<br />其他解决方案在最后一个属性之后和之前附加一个额外的,<hr />而这个和您的原始解决方案没有。

于 2013-03-11T14:55:07.227 回答