我正在开发一个小型应用程序,这种数据库可以通过许多选项进行过滤。我决定以我认为是最简单的方法来创建它,所有滑块和复选框都使用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请求而言,这不是一个理想的条件,除非在本地计算机上没有带宽需要考虑并且传输是瞬时的。
答案 0 :(得分:0)
即使解决方案看起来有些残酷,我也通过对代码的最小改动来解决了这个问题。
首先,我将file1.txt
重命名为file1.js
。然后我只是在文件的开头添加了
var content1 = `
并在结尾处关闭引号,因此整个文件现在是存储在变量中的多行文本。恰好与AJAX调用后发生的情况相同。我还必须将所有\
替换为\\
,现在可能还有其他字符需要转义。
第二,我在index.html
中添加了
<script src="file1.js"></script>
最后,我删除了上面的AJAX调用,使代码完整无缺。该代码将直接从content1
文件而不是通过AJAX接收变量file1.js
。
也许这不是解决问题的最优雅的方法,但是现在它仍然有效。