Я думаю, что вам не хватает совершенно правильного варианта, который я часто использую. Это моя типичная схема, и она еще не подвела меня ...: -)
Вот базовый шаблон jQuery, который я использую:
$(function() {
$.getJSON('/some/page',{foo:bar,bar:foo},function(json) {
if(json.outcome == 'success') {
$('body').prepend(json.html);
} else {
// Somehow let the user know why it didn't work
alert(json.error);
}
});
});
Вот базовая структура бэкэнда (в моем случае PHP), которую я использую:
<?php // Page: '/some/page'
/* Blah Blah Blah... do whatever needs to be done... */
// If everything turns out okay (assuming '$output' is the HTML
// you want to display...
echo json_encode(array('outcome'=>'success','html'=>$output));
// If something goes wrong... just do:
echo json_encode(array('outcome'=>'error','error'=>'Uh oh... something is broken'));
Естественно, вы захотите быть более конкретным со своей ошибкой, поместив их в некоторую переменную или что-то еще. Но вы должны понять. Также, конечно, вы можете добавить больше информации в вывод json. Вы можете иметь некоторый предварительно созданный HTML, а также некоторую другую информацию, такую как «уведомление об успехе» или новое имя класса для какого-то элемента, я не знаю… что угодно… возможности бесконечны.
В любом случае, причина, по которой я выбираю этот маршрут, заключается в том, что обычно (исходя из моего опыта) быстрее добавлять предварительно подготовленный HTML-код в DOM, а не циклически перемещаться по JSON и вставлять материал, если только это не просто текст заменить в элемент. Но метод, который я показал, IMO, лучший из обоих миров. Вы можете присоединить HTML в виде строки к одному из свойств JSON.
Happy jQuerying: -)