有没有更好的方法来处理这个JSON数据

时间:2010-08-26 14:11:55

标签: javascript jquery json

在开始阅读Sitepoint的“Ninja新手”之后,我刚刚开始使用jQuery,但是,一如既往,我想知道是否有更好的方法来编写我想出的代码。事实证明,答案几乎总是强调“是的”。

所有这些“如果”的陈述似乎都很荒谬。我怎么能做得更好?我应该看看哪些功能来清理它。谢谢你的帮助。

$('#user').change(function(){   
var user_id = $('#user').val();
$.ajax({
    type: 'POST',
    url: '../admin/billing/' + user_id,
    dataType: 'json',
    success: function(billing){
        //alert(billing.id);
        var name = '<a href="../user/view/' + user_id +'">' + billing.fname + ' ' + billing.lname + '</a><br />';
        if(billing.company_name != ''){
            var company_name = billing.company_name + '<br />';
        }else{
            var company_name = '';
        };
        if(billing.address_one != ''){
            var address_one = billing.address_one + '<br />';
        }else{
            var address_one = '';
        };
        if(billing.address_two != ''){
            var address_two = billing.address_two + '<br />';
        }else{
            var address_two = '';
        };
        var csz = billing.city + ', ' + billing.state + ' ' + billing.zip + '<br />';
        if(billing.phone != ''){
            var phone = billing.phone + '<br />';
        }else{
            var phone = '';
        };
        var data = name + company_name + address_one + address_two + csz + phone;
        $('#billing').empty().append(data);
        $('input:text').val('');
        $('#same-as-billing').attr('checked', false);
    }
});

});

2 个答案:

答案 0 :(得分:0)

不是一个巨大的改进,但会帮助John Resig的Javascript Micro Templating

一般来说,你想尝试渲染服务器端的所有内容,但如果你没有选择(来自外部域的数据)它会很有帮助。

答案 1 :(得分:0)

你可以遍历json对象并创建sting:

var data = [];
$.each(billing, function(key, value){
  if(value != "") data.push(value);
});
data = data.join("<br />");

但如果您需要的不仅仅是输出对象值(仅举例),那么这对您不起作用。这里没有什么可以优化的。您只能跳过一些else s

var data = '<a href="../user/view/' + user_id +'">' + billing.fname + ' ' + billing.lname + '</a><br />';
if(billing.company_name != "") data+= billing.company_name+"<br />";
if(billing.address_one != "") data+= billing.address_one+"<br />";
data+= billing.city+", "+billing.state+" "+billing.zip+"<br />";
// and so on