V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
proxytoworld
V2EX  ›  问与答

Ajax 异步删除资源,多次请求问题

  •  
  •   proxytoworld · Jan 26, 2021 · 1104 views
    This topic created in 1917 days ago, the information mentioned may be changed or developed.

    我在用 Laravel 框架构建 web 应用,在使用 Ajax 异步删除资源的时候,前端发送的 delete 请求一次比一次多一个

    这是我的 Ajax 代码

    function del(){
            $('#del').click(function (){
                $.ajax({
                    type: "DELETE",
                    url: '/api/apiposts/{{$id}}',
                    headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    },
                    success:function (result){
                        console.log("success:" + result);
                        
                        //location.reload();
                    },
                    error:function (result){
                        console.log("error:" + result);
                    }
                })
            });
        }
        
        <input type="button" value="删除" id="del" onclick="del()">
        
    

    第一次点 button 的时候没有请求,这是 burp 抓到的包

    7 replies    2021-01-26 21:43:17 +08:00
    akaxiaok339
        1
    akaxiaok339  
       Jan 26, 2021
    第一次点击的时候是绑定事件 之后每次点击又再绑定一次事件 并且触发之前的事件 当然越来越多
    akaxiaok339
        2
    akaxiaok339  
       Jan 26, 2021
    $('#del').click / onclick 二选一就行
    gtchan13579
        3
    gtchan13579  
       Jan 26, 2021
    function del(){

    $.ajax({
    type: "DELETE",
    url: '/api/apiposts/{{$id}}',
    headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    success:function (result){
    console.log("success:" + result);

    //location.reload();
    },
    error:function (result){
    console.log("error:" + result);
    }
    })

    }

    <input type="button" value="删除" id="del" onclick="del()">
    qiayue
        4
    qiayue  
    PRO
       Jan 26, 2021
    $('#del').click 这一行的意思就是每次点击 #del 时执行内部匿名函数
    就不要再在元素上写 onclick 了。
    kop1989
        5
    kop1989  
       Jan 26, 2021
    现在你的程序的语义是:
    触发点击事件 && 每次点击都往 id 为 del 的 dom 元素上添加一个 click 事件。

    所以第一次点击没反应,然后越点越多。
    wenzichel
        6
    wenzichel  
       Jan 26, 2021
    onclick 和 del 中的 click 冲突了,每执行一次 del,就多绑定一次 click 事件,然后就多执行一次 ajax 请求
    proxytoworld
        7
    proxytoworld  
    OP
       Jan 26, 2021
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5029 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 01:09 · PVG 09:09 · LAX 18:09 · JFK 21:09
    ♥ Do have faith in what you're doing.