У меня есть форма, которая открывается в диалоге jquery-ui, отправляется через ajax, читает обновленные данные в формате json и обновляет страницу. Все отлично работает с первого раза. При последующих запусках данные в базе данных корректно обновляются, но обновления на странице применяются к той же ячейке, что и первый прогон.
Используя «Просмотр сгенерированного источника» на панели инструментов веб-разработчика, я вижу, что старая форма все еще находится в DOM. Поэтому я подозреваю, что этот $("form#hostEdit").find("input#id").val()
либо всегда находит первую форму, либо оценивается только один раз. Я довольно новичок в jQuery, поэтому я не уверен, что с этим делать. Эта форма все еще должна быть в DOM? Должен ли я использовать другой селектор? Что-то еще полностью?
$("table.hostgrid a.new").click(function() {
var id = this.id.substring(3);
var $dialog = $('<div></div>')
.load('/hosts/new?byte1=${network.byte1}&byte2=${network.byte2}&byte3=${network.byte3}&byte4=' + id);
var getHostAction = #{jsAction @NetworkHosts.view(':id') /}
$dialog.dialog({
autoOpen: false,
title: 'New host at ${network.byte1}.${network.byte2}.${network.byte3}.' + id,
width: 500,
buttons: {
"Create": function() {
$.ajax({
async: true,
type: 'post',
url: '/hosts/create',
data: $("form#hostNew").serialize(),
success: function(response) {
$dialog.html(response);
if ($("div.flashSuccess") != null) {
$dialog.dialog('destroy');
$.ajax({
url: getHostAction({'id': $("form#hostEdit").find("input#id").val()}),
dataType: 'json',
success: function(data) {
updateHost(data);
},
error: function(data, msg, exception) {
alert("Error during request: " + msg);
},
});
}
}
});
}
}
});
$dialog.dialog('open');
return false;
});
функция, которая применяет обновления:
function updateHost(host) {
var cell = $("td#dot"+host.byte4);
cell.fadeOut("fast", function() {
cell.find("span.hostname").text(host.hostname).attr("title", host.description);
cell.removeClass().addClass(host.agegroup);
if (host.type)
cell.addClass(host.type.toLowerCase());
if (host.is_dhcp)
cell.addClass("dhcp");
if (host.is_service)
cell.addClass("service");
cell.fadeIn("fast");
});
}