没有调用第二个 Success 函数中的 Ajax 函数

Posted

技术标签:

【中文标题】没有调用第二个 Success 函数中的 Ajax 函数【英文标题】:Ajax function inside a second Success function is not being called 【发布时间】:2020-08-05 21:06:43 【问题描述】:

我正在使用DataTables 库,我需要在其中发出连续的AJAX 请求。 问题是第二个Success 函数中的AJAX 函数没有被调用。 这是整个代码

$(document).ready(()=>
    $.ajax(
        url: 'http://localhost:3000/api/post/getUserData',
        method: 'post',
        dataType: 'json',
        data: 
            "email": window.email,
            "token": window.token
        ,
        success: function(data) // <-----------------------FIRST SUCCESS FUNCTION
            let table = $('#datatable').dataTable(
                data: data,
                "autoWidth": true,
                columns: [
                    'data': 'id',
                    'data': 'main',
                    'data': 'shrinked',
                    'data': 'clicks',
                    "data": "id",
                        "render": function ( data, type, row, meta ) 
                            return `<button data-id=$data onclick="disableThis(event)" class="btn btn-warning">Disable</button>`
                        
                    ,
                    "data": "id",
                        "render": function ( data, type, row, meta ) 
                            return `<button data-id=$data onclick="deleteThis(event)" class="btn btn-danger">Delete</button>`
                        
                    
                ]
            )
//------------------------------Function to add new Row inside Datatable when Form is submmitted
            $(function () 
                $('#form').bind('submit', function (event) 
                    event.preventDefault();
                    $.ajax(
                        url: 'http://localhost:3000/userShrink',
                        type: 'post',
                        datatype: 'json',
                        data: 
                            fullUrl: $('#Url').val(),
                            email: window.email,
                            token: window.token
                        ,
                        success: function ()  // <-----------------SECOND SUCCESS FUNCTION (THIS ONE IS NOT EXECUTING)
                            $.ajax(
                                url: 'http://localhost:3000/api/post/getUserData',
                                method: 'post',
                                dataType: 'json',
                                data: 
                                    "email": window.email,
                                    "token": window.token
                                ,
                                success: function(data2)
                                    console.log(data2)
                                
                            )
                        
                    );
                );
            );
        
    )
)

现在我在浏览器中检查了我的网络应用程序的Network 配置文件,

在页面加载时,此块正在执行,从而将数据提供给 DataTables 库,然后呈现表格。

$(document).ready(()=>
    $.ajax(
        url: 'http://localhost:3000/api/post/getUserData',
        method: 'post',
        dataType: 'json',
        data: 
            "email": window.email,
            "token": window.token
        ,
        success: function(data) // <-----------------------FIRST SUCCESS FUNCTION
            let table = $('#datatable').dataTable(
                data: data,
                "autoWidth": true,
                columns: [
                    'data': 'id',
                    'data': 'main',
                    'data': 'shrinked',
                    'data': 'clicks',
                    "data": "id",
                        "render": function ( data, type, row, meta ) 
                            return `<button data-id=$data onclick="disableThis(event)" class="btn btn-warning">Disable</button>`
                        
                    ,
                    "data": "id",
                        "render": function ( data, type, row, meta ) 
                            return `<button data-id=$data onclick="deleteThis(event)" class="btn btn-danger">Delete</button>`
                        
                    
                ]
            )

之后,如果form被提交,它会触发这个事件,然后POST的数据库中的数据成功。

//------------------------------Function to add new Row inside Datatable when Form is submmitted
            $(function () 
                $('#form').bind('submit', function (event) 
                    event.preventDefault();
                    $.ajax(
                        url: 'http://localhost:3000/userShrink',
                        type: 'post',
                        datatype: 'json',
                        data: 
                            fullUrl: $('#Url').val(),
                            email: window.email,
                            token: window.token
                        ,

当第二个success 函数执行或不执行时出现问题,我需要第二个成功函数的原因是将新提交的数据加载到DataTables

success: function ()  // <-----------------SECOND SUCCESS FUNCTION (THIS ONE IS NOT EXECUTING)
                            $.ajax(
                                url: 'http://localhost:3000/api/post/getUserData',
                                method: 'post',
                                dataType: 'json',
                                data: 
                                    "email": window.email,
                                    "token": window.token
                                ,
                                success: function(data2)
                                    console.log(data2)
                                
                            )
                        

这种行为的原因可能是什么?谢谢。

【问题讨论】:

您是否厌倦了在第一个 ajax 调用之外移出添加行功能? 希望对您有所帮助***.com/questions/10089447/… 是的,我有,但还是不行。 将第二个成功函数从 ajax 回调中移出 @wiseone 我在发布我的问题之前已经尝试过了,也没有用。 【参考方案1】:

自己修好了, 这是add row 函数

$(function () 
    $('#form').bind('submit', async function (event) 
        // using this page stop being refreshing
        event.preventDefault();
        let data = 
            'fullUrl': $('#Url').val(),
            'email': window.email,
            'token': window.token
        
        let data2 = 
            'email': window.email,
            'token': window.token
        
        $.post('http://localhost:3000/userShrink', data);
        setTimeout(()=>
            $.post('http://localhost:3000/api/post/getUserData', data2).done(function (res)
                $('#datatable').DataTable().row.add(res[res.length-1]).draw();
            );
        , 1000)

    )
);

【讨论】:

以上是关于没有调用第二个 Success 函数中的 Ajax 函数的主要内容,如果未能解决你的问题,请参考以下文章

第二个ajax结果没有附加到我的div

如何在一个循环执行ajax方法里面嵌套的ajax方法

从控制器返回后没有调用 Ajax Success 函数? MVC

$.ajax()中的success和error的使用注意事项

jquery 多个ajax()请求。

第一个 jQuery ajax 调用与第二个冲突