2017-07-25 93 views
1

我使用ajax调用一个名为“div-GVPrevision”div内的表的部分视图。我正在使用数据表,但在ajax调用后出现错误,它说:ajax调用后的Datatables错误,ASP.Net

“DataTables warning:table id = GVPrevision - 无法重新初始化DataTable。有关此错误的更多信息,请参阅http://datatables.net/tn/3

这是Ajax代码:

<script> 
    function GVPrevision() { 
     $('#GVPrevision').DataTable({ 
      "aaSorting": [], 
      aLengthMenu: [ 
       [4, -1], 
       [4, "Todo"] 
      ], 
      responsive: false 
     }); 
    } 
    $(document).ready(function() { 
     GVPrevision(); 
     $('.btnagregar').click(function (event) { 
      event.preventDefault(); 
      var data = { 
       "codmov": $("#codmovf").val(), 
       "fechainicio": $("#fechainiciof").val(), 
       "fechatermino": $("#fechaterminof").val(), 
       "rutentidad": $("#rutentidadf").val(), 
       "motivo": $("#motivof").val() 
      }; 
      $.ajax({ 
       url: "/Ficha/AgregarfooterPrevision", 
       type: "POST", 
       data: JSON.stringify(data), 
       dataType: "json", 
       contentType: "application/json", 
       success: function (response) { 
        if (response.Success) { 
         $("#div-GVPrevision").load('@Url.Content("~/Ficha/GVPrevision")'); 
         GVPrevision(); 
        } 
        else 
         window.location.href = "@Url.Action("Prevision", "Ficha")"; 
       }, 
       error: function() { 
        console.log('Login Fail!!!'); 
       } 
      }); 
     }); 
    }); 
</script> 
+0

灿你发布你的CS代码? –

+1

可能通过调用'GVPrevision();'在jQuery AJAX'success'结果中初始化'DataTable'两次。尝试删除第二个电话并查看错误是否消失。 –

回答

0

余通过与jquery的$ .POST替代代码固定的问题()方法:

    if (response.Success) { 
         $.post("/Ficha/GVPrevision", function (datos) { 
          $("#div-GVPrevision").html(datos); 
          GVPrevision(); 
         }) 
        } 
0

,因为我相信,数据库初始化,曾多次因为你没有显示整个代码,我只能为你提供这个简单的,但不是建议SOLN是销毁数据表,然后再次拨打GCPervision ED SOLN不过是一个水溶液和只需使用Distroy功能

function GVPrevision() { 
      $('#GVPrevision').DataTable({ 
       "aaSorting": [], 
       aLengthMenu: [ 
        [4, -1], 
        [4, "Todo"] 
       ], 
       responsive: false 
      }); 
     } 
     $(document).ready(function() { 
      GVPrevision(); 
      $('.btnagregar').click(function (event) { 
       event.preventDefault(); 
       var data = { 
        "codmov": $("#codmovf").val(), 
        "fechainicio": $("#fechainiciof").val(), 
        "fechatermino": $("#fechaterminof").val(), 
        "rutentidad": $("#rutentidadf").val(), 
        "motivo": $("#motivof").val() 
       }; 
       $.ajax({ 
        url: "/Ficha/AgregarfooterPrevision", 
        type: "POST", 
        data: JSON.stringify(data), 
        dataType: "json", 
        contentType: "application/json", 
        success: function (response) { 
         if (response.Success) { 
       $('#GVPrevision').DataTable().destroy(); 
          $("#div- 
     GVPrevision").load('@Url.Content("~/Ficha/GVPrevision")'); 
          GVPrevision(); 
         } 
         else 
          window.location.href = "@Url.Action("Prevision", "Ficha")"; 
        }, 
        error: function() { 
         console.log('Login Fail!!!'); 
        } 
       }); 
      }); 
     }); 
    </script> 
0

你叫DataTable方法在这里的2倍,一个document.ready方法&另一个之后AJAX success方法:

$(document).ready(function() { 
    GVPrevision(); // first call 
    $('.btnagregar').click(function (event) { 

     // data insertion here 

     $.ajax({ 

      // other ajax options here 

      success: function (response) { 
       if (response.Success) { 
        $("#div-GVPrevision").load('@Url.Content("~/Ficha/GVPrevision")'); 
        GVPrevision(); // second call - this will fail 
       } 
       else 
        window.location.href = "@Url.Action("Prevision", "Ficha")"; 
      }, 
      error: function() { 
       console.log('Login Fail!!!'); 
      } 
     }); 
    }); 
}); 

为了解决这个问题问题,你有2个选择:

  1. 删除其中一个GVPrevisiondocument.ready或AJAX POST success部分,

  2. 使用带有bDestroy(有时destroy方法称为fnDestroy,拿起这是正确的适合您的DataTable版本)创建另一个DataTable,一起前destroy方法:

    function GVPrevision() { 
        $('#GVPrevision').DataTable({ 
         "aaSorting": [], 
         aLengthMenu: [ 
          [4, -1], 
          [4, "Todo"] 
         ], 
         responsive: false, 
         "bDestroy": true 
        }).destroy(); // or fnDestroy() 
    } 
    

如果您有DataTable版本1.10或更高版本,您可以添加destroy: true

function GVPrevision() { 
    $('#GVPrevision').DataTable({ 
     destroy: true // add this line 
     "aaSorting": [], 
     aLengthMenu: [ 
      [4, -1], 
      [4, "Todo"] 
     ], 
     responsive: false, 
    }); 
} 

参考:

Warning: Cannot reinitialise DataTable(数据表文件)

Datatables warning(table id = 'example'): cannot reinitialise data table

+0

我尝试了两种方法,在AJAX POST成功部分和document.ready之后(所以我将它留在ajax post成功部分之后)后删除GVPrevision调用,但结果相同,数据表在ajax调用后停止工作。 – DavidM

+0

@DavidM您是否发现浏览器控制台报告的任何错误?检查成功响应后,GVPrevision是否包含要在DataTable上加载的正确数据。 –