Javascript 如何检查https上是否存在文件夹

Javascript 如何检查https上是否存在文件夹,javascript,html,ajax,google-chrome,mixed-content,Javascript,Html,Ajax,Google Chrome,Mixed Content,我在github上托管了一个网页(flickrTest.html),我试图检查该网页所在目录中是否存在文件夹。托管文件夹如下所示: 我尝试使用如下ajax调用: $.ajax({ url: 'mapData', error: function() { //Ddirectory doesn't exist console.log("ERROR: expected directory n

我在github上托管了一个网页(flickrTest.html),我试图检查该网页所在目录中是否存在文件夹。托管文件夹如下所示:

我尝试使用如下ajax调用:

$.ajax({
            url: 'mapData',
            error: function() {
                //Ddirectory doesn't exist
                console.log("ERROR: expected directory named 'mapData'. Exiting...");
                return
            },
            success: function() {
                //Directory does exist
                console.log("mapData exists..");
             ...

但是我得到了一个混合内容错误,因为这个调用被认为是http,而我的网页所在的站点是https。如果包含绝对路径,我就能够访问mapData的JSON文件。有没有办法通过https检查文件夹的存在

首先,您的方法存在一个根本问题。正如其他人在评论中所述,您无法通过简单的http(或https)web请求检查文件夹是否包含内容(或存在),因为web服务器将期望使用HTML响应,HTML可以作为用户浏览器的信息显示。您可以创建一个处理程序或脚本,该处理程序或脚本将处理目录请求,并使用.htaccess规则或其他重写系统(取决于您所在的平台)映射该功能。我之所以认为这是一个“问题”,并没有说这是不可能的,是因为您可以(似乎您正在尝试)将该响应解析为可用的内容。也就是说,我认为这是离题的,而不是你实际遇到的错误的本质

您遇到的错误来自于在HTTPS中加载当前页面,并且您发出的ajax请求是通过HTTP的(如错误消息所示)。在您的情况下,此消息可能会产生误导,因为请求URL并非未标识为HTTPS,而是因为浏览器不相信URL是指向文件或文件夹的Web请求。只需在文件夹中添加一个尾随斜杠即可纠正此问题:

$.ajax({
        url: 'mapData/',
        error: function() {
            //Ddirectory doesn't exist
            console.log("ERROR: expected directory named 'mapData'. Exiting...");
            return
        },
        success: function() {
            //Directory does exist
            console.log("mapData exists..");
         ...
您现在已经解决了完成web请求的问题,但是您面临着第一部分中提到的一个问题。服务器将返回404错误,因为这就是github.io配置为响应空(或不存在)目录请求的方式。您将需要某种类型的服务器端处理程序来处理此请求,或者您将需要想出其他创造性的方法,例如在该文件夹中放置index.html,以便JavaScript能够解析结果。例如,您可以在文件夹中删除index.html,如果服务器返回200,则您知道该文件夹存在,但如果它返回404,则可以假定该文件夹不存在


如果还不知道的话,web服务器的设计就是为了实现这一点,因此浏览器在对其内容进行反向工程时受到限制。虽然服务器可以配置为返回目录内容,但默认情况下,大多数服务器将保护文件夹,以便远程用户在没有某种提升权限/身份验证的情况下无法浏览服务器。本质上,这需要一种更为定制的服务器端方法的原因并不是因为前端代码有问题,而是因为web服务器设计为不允许这种类型的事情,而服务器由于安全原因被配置为允许。

标题中的悬念让我很难受!对于问题,请不要使用clickbait样式的标题。把整个问题贴到问题所在的地方(标题)。你不能通过AJAX阅读整个文件夹。您只能访问单个文件。这是一个相对URL。不太可能从中获得混合内容。@MikeC-对于“文件夹”,我认为我们可以读取“映射到Web服务器文件系统上的目录的URL,服务器返回索引文件或自动生成的目录列表”,这一点解释得非常清楚。感谢您的详细回复!我很高兴这有帮助。祝你好运