简体   繁体   English

如果在ajax加载的模板中调用,Ajax无法正常工作吗?

[英]Ajax not working if called inside an ajax loaded template?

I'm using ajax to change the value of an object (status), when the ajax is called, the object is changed but the page is reloaded. 我正在使用ajax更改对象(状态)的值,当调用ajax时,对象已更改,但页面已重新加载。 here's my template: 这是我的模板:

    <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>&nbsp&nbsp&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>

the ajax: 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);
            }
        });
    }
}

and the method: 和方法:

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])
    }

what am I missing? 我想念什么?

Try below code instead of <g:link onClick="inativar('/aluno/inativar/${aluno.id}', 'divForm', '${aluno.nome}')"> <i class="fa fa-trash button delete"></i></g:link> inline onClick JS function calling as inline onClick calling looks function definition in global scope. 请尝试使用以下代码,而不是<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 Code: 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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM