#javascript #jquery #ajax
#javascript #jquery #ajax
Вопрос:
Я использую ajax для изменения значения объекта (status), при вызове ajax объект изменяется, но страница перезагружается. вот мой шаблон:
<table id="datatable" class="tabela">
<thead>
<tr>
<th>RA</th>
<th>Ações</th>
</tr>
</thead>
<tbody>
<g:each var="aluno" in="${listaAluno}">
<tr>
<td>${aluno.ra}</td>
<td>
<g:link action="editar" controller="aluno" params="[id:aluno.id]"> <i class="fa fa-pencil button edit"></i></g:link>amp;nbspamp;nbspamp;nbsp
<g:link onClick="inativar('/aluno/inativar/${aluno.id}', 'divForm', '${aluno.nome}')"> <i class="fa fa-trash button delete"></i></g:link>
</td>
</tr>
</g:each>
</tbody>
</table>
<script type="text/javascript">
$(document).ready(function () {
$('#datatable').dataTable({colReorder: true});
});
</script>
ajax:
function inativar(metodo, div, objeto) {
var confirmar = confirm("Realmente deseja remover " objeto " ?");
if (confirmar) {
$.ajax({
url: metodo,
type: "GET",
dataType: 'text',
success: function (data) {
$("#" div).html(data);
}
});
}
}
и метод:
def inativar(){
Aluno aluno = Aluno.get(params.id)
aluno.status = false
aluno.save(flush: true)
def listaAluno = Aluno.findAllByStatus(true)
render(template:"list", model:[listaAluno:listaAluno])
}
чего я не понимаю?
Ответ №1:
Попробуйте приведенный ниже код вместо <g:link onClick="inativar('/aluno/inativar/${aluno.id}', 'divForm', '${aluno.nome}')"> <i class="fa fa-trash button delete"></i></g:link>
вызова встроенной функции onClick JS, поскольку встроенный вызов onClick отображает определение функции в глобальной области видимости.
<g:link class="inativar"><i class="fa fa-trash button delete"></i></g:link>
JS-код:
<script type="text/javascript">
var alunoId='${aluno.id}';
var metodo='/aluno/inativar/' alunoId;
var divId='divForm';
var alunoNome='${aluno.nome}';
$(document).ready(function () {
$('#datatable').dataTable({colReorder: true});
//Call inativar on click
$('.inativar').click(function(){
inativar(metodo,divId,alunoNome);
});
});
function inativar(metodo, div, objeto) {
var confirmar = confirm("Realmente deseja remover " objeto " ?");
if (confirmar) {
$.ajax({
url: metodo,
type: "GET",
dataType: 'text',
success: function (data) {
$("#" div).html(data);
}
});
}
}
</script>
Комментарии:
1. попробовал, получил эту ошибку: Ошибка вычисления выражения [aluno.id ] в строке [30]: не удается получить свойство ‘id’ для нулевого объекта. И это не очень хороший вариант, потому что я собираюсь использовать этот ajax на множестве страниц
2. Если aluno.id равно null, тогда это не ошибка JS. Сначала установите этот идентификатор в object перед отображением страницы. Также jquery $ (document). готово(функция (){}); загружается при загрузке страницы.
3. Как уже говорилось, метод работает должным образом, объект изменен, проблема в том, что страница перезагружается после него.
4. Также файл create javascript содержит эту общую функцию инициализации ajax. И соответствующая страница просто загружает событие click в dom при загрузке страницы, как событие click.
5. Поскольку это ajax-запрос, страница не будет перезагружена. Убедитесь, что вы не отправляете страницу при вызове ajax.