如何使用Jquery检查链接是否可用

时间:2019-01-03 03:10:45

标签: jquery datatables

在我的Asp.net MVC应用程序中,我正在使用Jquery数据表来显示数据。我的问题是在这里您可以看到我使用数据表内的链接打开文件。当文件在下载文件夹404服务器中不可用时,显示错误,而不是我需要定向另一个页面。如何检查此数据表中文件是否可用。文件类型为.html

<script>

    $("#cribTable").DataTable({

        "ajax": {

            "url": "/CribManual/GetAllDownloadedCribs",
            "type": "GET",
            "processing": true,
            "datatype": "JSON",
            "serverSide": true
        },
        "columns": [
            {
                "data": "ID", "render": function (data) {

                    return `<button type="button"  data-toggle="confirmation" data-title="Are you sure?" href='@Url.Action("DeleteCrib", "CribManual")/${data
                        }'" class="btn btn-danger">Delete</button>`;
                },

                orderable: false
            },
            { "data": "CUS_NAME" },
            { "data": "CUS_NIC" },
            { "data": "STATUS" },
            { "data": "LOCATION" },
            {
                "data": "LOCATION", 'render': function (data, type, full, meta) {
                   return '<a href="/Downloads/' + data + '">Read File</a>';
                }
            }
        ]

    });

</script>

1 个答案:

答案 0 :(得分:0)

不建议使用此解决方案,但是您可以在执行AJAX调用时捕获错误代码。参考:Capture 404 status with jQuery AJAX

这可能看起来像这样:

{
  "data": "LOCATION",
  "render": function (data, type, full, meta) {
    var dUrl = "/Downloads/" + data;
    var result = $("<a>").html("Read File");
    $.ajax({
      cache: false,
      url: dUrl,
      success: function(dat, stat, xhr){
        result.attr("href", dUrl);
      },
      error: function (xhr, stat, err){
        if(xhr.status==404) {
          result.attr("href", "#").addClass("no-file");
        }
      }
    });
    return result.prop("outerHTML");
  }
}

DoS警告,这将为表中呈现的每个文件生成一个HTTP请求。如果是3或4,则您的Web服务器将能够处理它。但是,如果它是10、50、100、500、1000等,等等,则本质上将要对Web服务器执行拒绝服务攻击。大多数Web服务器配置为允许10个并发同时连接到服务器。您可以在配置中进行设置,但最终可能会耗尽资源。

服务器可能无法打开和关闭足够的套接字来处理所有请求,并将开始对它们进行排队。这将导致浏览器必须等待更长的时间才能执行脚本,并可能导致超时。根据列表大小,浏览器可能会开始消耗更多的内存资源,并且可能会锁定或崩溃。

同样,我会强烈建议服务器端脚本承担繁重的工作。如果该项目在服务器上不存在,则它不应该返回数据,或者应该返回Datatable可以使用的值,而不必执行很多潜在的威胁性工作。

这是从经验而不是理论出发的。

希望有帮助。