ajax嵌套陷阱

ajax嵌套陷阱

$('.ajaxupd').click(function () {
            $('.shadow1').show();
            $('.update').show();

            var tds=$(this).parent().prevAll();
            var cids=$(tds[0]).attr('classid');
            var tname=$(tds[1]).text();
            var tid=$(tds[2]).text();
            var l='';
            console.log(cids,666);
            for(i of cids){
                if(i!='['&&i!=']'&&i!=' '){
                    l=l+i
                }
            }
            l_s=l.split(',');
            var c_s=[];
            for(i of l_s){
                c_s.push(i)
            }
            console.log(c_s,88);
            $('#cid').val(c_s);
            $('#tid').val(tid);
            $('#tname').val(tname);
        });
        
        $('#ajaxcancel').click(function () {
            $('.shadow1, .update').hide();
        });
        
        $('#ajaxtijiao').click(function () {

            $.ajax({
                type:'POST',
url:'/appteacher/ajax_up_teacher/',
                traditional:true,
                data:{'tname':$('#tname').val(),'tid':$('#tid').val(),'cid':$('#cid').val()},

                success:function (data) {
                    console.log(11121212121);
                    console.log(data);
                    if(data['code']==10000){
                        alert('更改成功');
                        window.location.href='/appteacher/teacher/';
                    }else {
                        alert('更改失败');
                    }
                }
            })
        })

这里一共有三个点击事件:

$('.ajaxupd').click—-----—1

$('#ajaxcancel').click-------2

$('#ajaxtijiao').click———3

一号事件发生后二号和三号事件才能触发,但是之前为了方便传值,我直接把二号和三号事件写在了一号事件里面.

问题来了!

如此,若是点击一号后点击三号取消,二号会持续处于监听状态,(多次如此操作会有多个提交监听事件).

待到之后若是点击二号这些事件会同时触发,造成修改错乱,甚至会导致多个数据库同时操作相同数据而出错.

总结:ajax事件尽量不要使用嵌套!

感谢小何同学的指导.

原文地址:https://www.cnblogs.com/luowenConnor/p/11219287.html