У меня есть 2 js метода, которые делают сообщение Ajax к серверу и отображают результаты соответственно.
1) Удалите - Удаляют после обратного вызова, 'скрывает' удаленный элемент и не делает обновления страница
function DeleteRule(ruleId) {
var deleteRuleAction = $('#delete-rule-action').val();
$.post(deleteRuleAction, { ruleId: ruleId }, function(data) {
if (data.Status == 'Success') {
alert(data.Messages[0]);
$('#rule-details-' + ruleId).fadeOut(500);
$('#div-rule-button-' + ruleId).fadeOut(500);
activeRuleId = null;
}
else
alert(data.Messages[0]);
}, 'json');
}
2) Сохраните - Сохраняют после обратного вызова, должен обновить страницу для показа недавно добавленного элемента наряду с существующими элементами
function SaveRule() {
var ruleId = $('#rule-id').val();
var saveOrUpdateRuleAction = $('#add-or-edit-rule-action').val();
$.post(saveOrUpdateRuleAction, { ruleId: ruleId }, function(data) {
if (data.Status == 'Success') {
alert(data.Messages[0]);
location.reload(true);
// This is supposed to reload the page after saving the element.
// But the page gets reloaded without display the alert on the previous line.
}
else
alert(data.Messages[0]);
}, 'json');
}
Я вызываю эту функцию Сохранения как:
<button type="submit" onclick="javascript:Save()">
Проблема: функция обратного вызова в Сохранении не становится зашедшей, все и страница обновляются автоматически. Во время вызова Ajax объект, который должен был быть сохранен, сохраняется к базе данных. Но, код в функции обратного вызова не становится выполняемым.
Мне предложили следующий взлом, чтобы заставить его работать
<button type="submit" onclick="javascript:Save(); return false;">
Мне сказали, что 'возвращают false'; останавливает страницу от автоматической перезагрузки. Однако это не имеет смысла начиная с моего Удалять, который не должен быть перезагружен, не имеет этого взлома, чтобы мешать ему перезагрузить.
После использования FireBug Удалите, показал успешный POST и возврат данных JSON. Однако Сохраните (без взлома), показал 'аварийное прекращение работы'
вы можете проверить с помощью обычной кнопки ... изменив его type = "button"?