Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更好的方法来处理这个JSON数据_Javascript_Jquery_Json - Fatal编程技术网

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

Javascript 有没有更好的方法来处理这个JSON数据,javascript,jquery,json,Javascript,Jquery,Json,在开始阅读Sitepoint的“忍者新手”之后,我对jQuery感到有些不安,但是,和往常一样,我一直在想,是否有更好的方法来编写我想到的代码。事实证明,答案几乎总是明确的“是” 所有这些“如果”的说法似乎都很荒谬。我怎样才能做得更好?我应该看什么功能来清理这个。谢谢你的帮助 $('#user').change(function(){ var user_id = $('#user').val(); $.ajax({ type: 'POST', url: '../admin/

在开始阅读Sitepoint的“忍者新手”之后,我对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);
    }
});
$('#user').change(function(){
var user_id=$('#user').val();
$.ajax({
键入:“POST”,
url:'../admin/billing/'+用户id,
数据类型:“json”,
成功:功能(计费){
//警报(billing.id);
变量名称='
'; 如果(billing.company_name!=''){ var company_name=billing.company_name+'
; }否则{ var公司名称=“”; }; 如果(billing.address_one!=''){ var address_one=billing.address_one+'
; }否则{ 变量地址_one=“”; }; 如果(billing.address_two!=''){ var address_two=billing.address_two+'
; }否则{ 变量地址_two=“”; }; var csz=billing.city+,“+billing.state+”+billing.zip+”
; 如果(billing.phone!=''){ var phone=billing.phone+“
”; }否则{ var phone=''; }; var数据=名称+公司名称+地址一+地址二+csz+电话; $('#billing').empty().append(数据); $('input:text').val(''); $(“#与账单相同”).attr('checked',false); } });

}))

这不是一个很大的进步,但会帮助约翰·雷西格


通常,您希望尝试在服务器端呈现所有内容,但如果您没有选择(数据来自外部域),这会很有帮助。

您可以循环json对象并创建sting:

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

您可能会考虑在服务器上呈现html。你在服务器上运行什么?PHP、ASP.NET…完全同意Yves的观点-除了不能编辑AJAX端点之外,没有充分的理由呈现所有这些HTML客户端。您会发现,在编程过程中,大多数代码都是错误捕获的。有一些优雅而简洁的方法可以做到这一点,但您总是会在客户端使用“臃肿”的代码检查error conditions.php(codeigniter)。我们可以在下面Ken的帖子上继续讨论吗?我已经向他提出了关于同一件事的后续行动。谢谢这实际上是我一直在和Ken争论的一个问题的一个很好的线索。谢谢我将为几个不同的jQuery操作使用相同的JSON数据,但所有操作的格式都不同。您的意思是说运行几个不同的ajax调用并让服务器完成工作比运行一个ajax调用并让jQuery完成工作更好吗?谢谢@Ryan通常我会说您希望将模板保留在服务器端。我遇到过很多情况,我用javascript做模板,然后我需要用php做相同的服务器端模板(反之亦然)。显然,我不喜欢同一个模板有多个副本,因此它最终被重构为服务器端模板。我理解你的观点,你只是在做更多的ajax调用,你可能不需要,但你得到了缓存渲染和模板一致性的优势。这真的取决于你,但如果你在客户端使用某种形式的模板。谢谢,肯。巨大的帮助。以一种奇怪的方式,我很高兴知道我对编码机制已经很熟悉了,现在我可以花时间思考它的原理和最佳实践。干杯。我计划在几个不同的jQuery操作中使用相同的JSON数据集,Anpher,所以我认为循环对我不起作用。但是,压缩版本(没有其他版本)看起来很棒。谢谢
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