在我的Jquery应用程序中,我使用Asp.net数据表来显示数据。我的问题在这里,你可以看到我是用数据表内部的链接来打开文件的。当下载文件夹404中的文件不可用时,显示服务器错误,而不是我需要指向另一个页面。如何检查此datatable.File类型was .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>发布于 2019-01-03 15:53:27
AJAX不建议使用此解决方案,但您可以在执行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 WARNING这将为表中呈现的每个文件生成一个HTTP请求。如果是3或4,您的web服务器将能够处理它。但是如果是10,50,100,500,1000等,你将在本质上对你的web服务器执行拒绝服务攻击。大多数web服务器都配置为允许10个并发同时连接到服务器。您可以在配置中进行配置,但最终可能会耗尽资源。
服务器可能无法打开和关闭足够的套接字来处理所有请求,并将开始对它们进行排队。这将导致浏览器必须等待更长时间才能执行脚本,并可能导致超时。根据列表大小的不同,浏览器可能会消耗更多的内存资源,并可能锁定或崩溃。
再一次,我强烈建议让服务器端脚本来做繁重的工作。如果项在服务器上不存在,它不应该返回数据,或者它应该返回一个Datatable可以使用的值,而不必执行许多可能具有威胁的工作。
这来自于经验,而不是理论。
希望这能有所帮助。
https://stackoverflow.com/questions/54015833
复制相似问题