-1

我在 github (flickrTest.html) 上托管了一个网页,我正在尝试检查与网页位于同一目录中的文件夹是否存在。托管文件夹如下所示:http: //imgur.com/a/pZWoH

我尝试使用这样的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检查文件夹是否存在?

4

1 回答 1

1

首先,您的方法存在一个根本问题。正如其他人在评论中所说,您无法通过简单的 http(或 https)Web 请求检查文件夹是否包含内容(或存在),因为 Web 服务器将期望使用可以作为用户浏览器信息呈现的 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 服务器被设计为不允许这种类型的事情,除非服务器被配置为允许它由于安全。

于 2016-08-27T16:59:10.717 回答