如何让Json成为Ajax $ .getJSON()的关键和价值?

时间:2013-03-11 14:50:18

标签: javascript ajax json getjson

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

 $(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()。

2 个答案:

答案 0 :(得分: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 />');
    }
});

Demo

答案 1 :(得分: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元素一次,而不必知道是否要添加最后一个{{1}在每个循环中。其他解决方案在最后一个属性之后和<br />之后追加<br />,而这和原始解决方案不同。