【问题标题】:Apache2 with xmlhttp带有 xmlhttp 的 Apache2
【发布时间】:2020-12-17 12:36:55
【问题描述】:

我有一个 JavaScript 函数,我在其中传递服务器端目录的路径/名称,以便将子目录的路径/名称返回到数组。 添加了额外的 console.log() 以检查流程。

以下函数来自 answer,然后进行了一些调整以满足需要。

function loadSubDir(dir) {
  console.log("Initial method call with ", dir);
  let res = null;
  let path = null;
  let xmlhttp = new XMLHttpRequest();
  xmlhttp.open("GET", dir, false);
  xmlhttp.send();
  if (xmlhttp.status == 200) {
    res = xmlhttp.response;
    $(res)
      .find(" td > a ")
      .each(function() {
        path = $(this).attr("href");
        console.log("Values for Categories : ", path);
        subDirs.push(path);
      });
  }
  subDirs.shift();
  return subDirs;
}

这在我的本地 Apache 服务器上运行良好,没有任何问题,我使用默认的 Apache 配置,只为该 JavaScript 文件可用的目录添加文档根目录。

但如果我在另一个 Apache 服务器环境中使用相同的实现,这 FAILS。放置日志后,我注意到在服务器上运行时没有出现“类别值”日志。

是否需要任何额外的配置或可能是什么原因?

谢谢!

【问题讨论】:

  • 什么是xmlhttp.statusres 是什么?网络选项卡显示什么?请求是否成功并获得了您期望的数据?查看请求和响应标头。有什么出乎意料的吗?它们与您在工作测试环境中看到的相符吗?
  • 说“它失败了”远远不足以回答您的问题。当它失败时你会得到什么 xmlhttp.status?网络选项卡下的浏览器控制台中显示什么?
  • 亲爱的@Quentin 感谢您抽出时间和关注这个问题。 resresult 一样使用。因此,当我检查时,我知道我们在 docker 上使用了 Apache,并在我的 PC 中也进行了配置,我注意到你提到的响应不同。所以我改变了传递给 .find() 方法的参数。 .find("li > a") 而不是 .find("td > a").. 然后它继续执行.. 谢谢你的建议..
  • 尊敬的@ocrdu 感谢您为这个问题付出的时间和关注。我希望我确实设法解释了我为解决上述评论中遇到的问题所做的工作。再次感谢您。

标签: javascript html apache xmlhttprequest serverxmlhttp


【解决方案1】:

问题是我如何实现 $(res).find() 方法。在我的本地 Apache 服务器环境中,响应是;

<html>
 <head><title>Index of /XXXX-XXX</title></head>
 <body>
  <h1>Index of /XXXX-XXX</h1>
  <table>
   <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
   <tr><th colspan="5"><hr></th></tr>
   <tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/">Parent Directory</a></td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="XXX/">XXX/</a></td><td align="right">2020-12-14 17:10  </td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="XXX/">XXX/</a></td><td align="right">2020-12-15 11:25  </td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="XXX/">XXX/</a></td><td align="right">2020-12-15 11:25  </td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="XXX/">XXX/</a></td><td align="right">2020-12-14 18:00  </td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="XXX/">XXX/</a></td><td align="right">2020-12-14 17:53  </td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="XXX/">XXX/</a></td><td align="right">2020-12-15 11:24  </td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="XXX/">XXX/</a></td><td align="right">2020-12-14 17:53  </td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="XXX/">XXX/</a></td><td align="right">2020-12-14 17:54  </td><td align="right">  - </td><td>&nbsp;</td></tr>
   <tr><th colspan="5"><hr></th></tr></table><address>Apache/2.4.29 (Ubuntu)Server at localhost Port 80</address>
 </body>
</html>

所以.. $(res).find(" td > a ") 有效.. 由于我们使用的是 Apache o docker,因此响应是:

<html>
 <head>
  <title>Index of /XXXX-XXX</title>
 </head>
 <body>
  <h1>Index of /XXXX-XXX</h1>
  <ul><li><a href="/"> Parent Directory</a></li>
  <li><a href="XXX/">XXX/</a></li>
  <li><a href="XXX/">XXX/</a></li>
  <li><a href="XXX/">XXX/</a></li>
  <li><a href="XXX/">XXX/</a></li>
  <li><a href="XXX/">XXX/</a></li>
  <li><a href="XXX/">XXX/</a></li>
  <li><a href="XXX/">XXX/</a></li>
  <li><a href="XXX/">XXX/</a></li>
  </ul>
 </body>
</html>

在这里,而不是 $(res).find("td > a") 我需要使用 .find() 方法作为 $(res).find("li > a").

然后它继续执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多