jQuery检查文件是否存在于本地

时间:2016-07-27 07:17:54

标签: javascript jquery html

我正在为公司开发本地站点(仅限本地内部使用,离线且没有服务器)。我有一个主页面有一个主div,包含3个不同的div。每个div都链接到一个页面和" onclick"每个div的事件将加载链接到主div的页面。所以我必须检查文档就绪功能,如果每个页面都存在,如果没有,我想删除链接到该页面的div。如何检查本地页面是否存在?如果页面存在,我发现有很多回答检查连接状态,但我的html只能在离线和本地工作,所以我无法使用该方法。

编辑 - 已解决

我使用@ che-azeh:

的脚本解决了这个问题
function checkIfFileLoaded(fileName) {
    $.get(fileName, function(data, textStatus) {
        if (textStatus == "success") {
            // execute a success code
            console.log("file loaded!");
        }
    });
}

如果文件成功加载,我将更改新隐藏div的内容,该div将告诉另一个脚本是否必须删除三个div中的每一个。

5 个答案:

答案 0 :(得分:4)

此函数检查文件是否可以成功加载。您可以使用它来尝试加载本地文件:

function checkIfFileLoaded(fileName) {
    $.get(fileName, function(data, textStatus) {
        if (textStatus == "success") {
            // execute a success code
            console.log("file loaded!");
        }
    });
}
checkIfFileLoaded("test.html");

答案 1 :(得分:3)

我建议您在客户端的计算机上运行本地Web服务器。 (另请参阅下面的本地XHR访问编辑)。

使用本地Web服务器,他们可以像启动应用程序一样启动它。例如,您可以使用节点http-server。您甚至可以将其安装为node / npm包,这样可以更轻松地进行部署。

通过使用正确的http服务器(在您的情况下是本地),您可以使用xhr请求:

$(function(){
    $.ajax({
        type: "HEAD",
        async: true,
        url: "http://localhost:7171/myapp/somefile.html"
    }).done(function(){
        console.log("found");
    }).fail(function () {
        console.log("not found");
    })
})

编辑:

火狐

另一篇帖子(@ che-azeh)引起了我的注意,firefox 允许XHR文件“protocol”。在撰写本文时,上述内容在firefox中使用url只有somefile.html并使用文件方案。

Chrome有一个选项 allow-file-access-from-files http://www.chrome-allow-file-access-from-file.com/)。这也允许本地XHR请求 此标志用于测试目的:

  

您应该能够毫无困难地在Google Chrome中运行测试

我仍然建议使用本地Web服务器,因为这会使您独立于这些浏览器标志,并且一旦firefox / chrome决定禁用对此的支持,就可以防止回归。

答案 2 :(得分:0)

您可以尝试在try-catch构造中加载页面。如果页面存在,则会加载它。如果没有,您可以(在catch内)将相关div设置为hidden

答案 3 :(得分:0)

尝试使用$.ajax访问该页面。使用error:选项运行一个回调函数,删除链接到页面的DIV。

$.ajax({
    url: "page1.html",
    error: function() {
        $("#page1_div").remove();
});

您可以在所有DIV上循环使用此代码。

答案 4 :(得分:0)

您可以使用jquery load函数

$("div").load("/test.html", function(response, status, xhr) {
  if (status == "error") {
    var msg = "Sorry but there was an error: ";
    $(this).html(msg + xhr.status + " " + xhr.statusText);
  }
});