【问题标题】:AJAX request on local directory, but not on localhost本地目录上的 AJAX 请求,但不在 localhost 上
【发布时间】:2019-07-14 16:54:01
【问题描述】:

我正在开发一个小型应用程序,一种可以通过很多选项进行过滤的数据库。我决定以我认为最简单的方式创建它,所有滑块和复选框的 HTML 以及用于过滤结果的 JavaScript/jQuery。这应确保分发此应用程序的可能性,而无需针对不同的操作系统进行编译或让用户安装其他软件。最终用户只需下载文件,打开index.html并使用使用程序。

我的“数据库”是一个 .txt 文件,与 index.html 位于同一目录,通过 AJAX 检索:

$.when(ajaxCall1()).done(function(content1) {
    ...
});

在哪里

function ajaxCall1() {
    return $.ajax({mimeType: 'text/plain; charset=UTF-8', url: 'file1.txt', dataType: 'text'});
}

如果这很重要,我选择以这种方式实现 AJAX 调用,因为我计划将来在多个文件上扩展数据库,$.when 等待所有 AJAX 调用结束并传递所有内容到隐式函数的参数中。

这在一周前运行良好(至少在 Firefox 上,我还没有在 Chrome 上测试过),但现在一个新的 Firefox 更新阻止了 AJAX,说“CORS 请求不是 HTTP”。

正如我所说,我选择了 HTML 和 JS/jQuery,这样最终用户就不必在他的计算机上安装任何东西。我很确定要求我的潜在用户在他们的计算机上安装服务器会阻止他们中的大多数人,以及访问about:config 并修改现在阻止 AJAX 请求的变量(这也会产生潜在的安全问题,所以这也是不道德的)。

我该如何规避最终用户应该能够简单地下载文件并打开index.html,而无需安装其他软件或编辑某些浏览器配置的问题?

在服务器上上传文件,虽然理论上是一个有效的解决方案,但会带来一些问题,因为file1.txt 已经很大并且将来会变得更大。不是 AJAX 请求的理想条件,除非在本地机器上,不需要考虑带宽并且传输是即时的。

【问题讨论】:

  • 可能会考虑从您的 html 和 js 创建一个电子应用程序。它集成了自己的节点服务器和 chromium 实例,除了初始安装下载大小之外,不需要更改您当前正在使用的内容。也可以使用比txt文件更优秀的数据库
  • 至于迁移到网络...可以使用像 indexedDb 这样的本地数据库来获得即时加载,并与您的后端同步
  • @charlietfl Electron 似乎需要对代码进行大量更改。我正在研究它,但我不确定我会喜欢它。
  • 正如我所想,Electron 远非适合我的情况。虽然 AJAX 请求有效,但其他一切都变得更糟。我没有浏览器的任何功能,整体控制也更少。对不起。

标签: javascript jquery ajax


【解决方案1】:

我通过对代码的最小改动解决了这个问题,尽管这个解决方案看起来有点残酷。

首先,我将file1.txt重命名为file1.js。然后我就简单的在文件开头加了:

var content1 = `

并在末尾关闭引号,这样整个文件现在是存储在变量中的多行文本。就像在 AJAX 调用之后发生的一样。我还必须将所有\ 替换为\\,现在可能还有其他字符需要转义。

其次,在index.html我加了

<script src="file1.js"></script>

最后我删除了上面的 AJAX 调用,保留了里面的代码。此代码将直接从file1.js 文件而不是通过AJAX 接收变量content1

也许这不是解决问题的最优雅的方法,但现在它仍然有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-30
    • 2016-05-04
    • 1970-01-01
    • 2020-11-11
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多