Спасибо большое. Вы правильно направление подсказали.
Вот такой у меня окончательный вариант получился(c учетом что теперь ответ приходит в JSON):
function showUrlInDialog(url, title){
var tag = $("<div></div>");
$.ajax({
url: url,
success: function(data) {
tag.html(data).dialog({modal: true,
buttons : {
Ok: function() {
$.post(url, $("#f").serialize(),function(datar) {
$("#f").find('.error').remove();
if (datar.success == true) { tag.html(data).dialog('close'); }
else { display_form_errors(datar['data'], $('#f'));}
});
},
Cancel: function() {
tag.html(data).dialog('close');
return false;
}
},
width: 'auto', title: title }).dialog('open');
}
});
}
function display_form_errors(errors, $form) {
for (var k in errors) {
$form.find('input[name=' + k + ']').after('<div class="error">' + errors[k] + '</div>');
}
}
Вот только последнее непонятное осталось- почему когда форму так вызываешь один раз и закрываешь- если вызвать еще раз - уже прилетающие в JSON ошибки не отображаются.