2010-08-26 4 views
0

Я просто мочу ноги с помощью jQuery после того, как начал читать «Начинающий ниндзя» сайта Sitepoint, но, как всегда, мне осталось интересно, есть ли лучший способ напишите код, который я придумал. Как оказалось, ответ почти всегда и решительно «да».Есть ли лучший способ справиться с данными JSON?

Все эти заявления «если» кажутся смешными. Как я могу сделать это лучше? На какие функции я должен смотреть, чтобы очистить это. Спасибо за помощь.

$('#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); 
    } 
}); 

});

+1

Ну, вы можете подумать о том, чтобы html отображался на сервере. Что вы запускаете на сервере? PHP, ASP.NET ... –

+0

Полностью согласен с Yves - кроме того, что он не может редактировать конечную точку AJAX, нет веской причины для визуализации всей этой HTML-клиентской стороны. –

+0

. Вы можете найти в программировании большую часть вашего кода - это уловка ошибок , Существуют элегантные и более чистые способы сделать это, но вы всегда будете иметь «раздутый» код проверки ошибок. – Chris

ответ

0

Не огромное улучшение, но поможет Резиг-х Javascript Micro Templating

Как правило, вы хотите, чтобы попытаться оказать сторону все сервера, но если у вас нет выбора (данные, поступающие из внешнего домена), это полезно.

+0

Это действительно отличное решение для вопроса, с которым я боролся с Кеном. Благодарю. Я буду использовать те же данные JSON для нескольких различных действий jQuery, но все будет отформатировано по-разному. Вы хотите сказать, что лучше запустить несколько различных вызовов ajax и заставить сервер выполнить работу, чем запустить 1 вызов ajax и выполнить jQuery? Благодаря! – Ryan

+0

@ Ryan обычно я бы сказал, что вы хотите сохранить свои шаблоны на стороне сервера. У меня было много ситуаций, когда я делаю шаблоны в javascript, а затем мне нужен один и тот же серверный сервер в php (или наоборот). Мне не нравится иметь несколько копий одного и того же шаблона, поэтому он заканчивается рефакторингом на серверный шаблон. Я понимаю вашу точку зрения, вы просто делаете больше вызовов ajax, которые вам могут не понадобиться, но вы получаете преимущество кэширования рендеринга и согласованности шаблонов. Это действительно зависит от вас, но если вы делаете это на стороне клиента, используйте какую-либо форму шаблона. –

+0

Спасибо, Кен. Огромная помощь. Как это ни странно, это хорошее чувство, что я достаточно уверен в механике кодирования, что теперь я могу потратить время на размышления о философии и лучших практиках. Приветствия. – Ryan

0

Вы можете Переберите объект JSON и создать жала:

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 
+0

Я планирую использовать тот же набор данных JSON для нескольких различных действий jQuery, Anpher, поэтому я не думаю, что цикл будет работать для меня. Однако сжатая версия (без чужого) выглядит великолепно. Благодаря! – Ryan

Смежные вопросы