javascript - 即使文件存在,XMLHttpRequest 也会返回 404
问题描述
这就是我的项目的文件结构。语音、文本和模板是文件夹。
我运行python app.py
,当我转到 localhost 时,http://0.0.0.0:8080/
我可以看到index.html
内容通过管道输入的页面app.py
。
里面有index.html
从 管道输入的文本voice.txt
,如果我voice.txt
在我的文本编辑器中查看,我可以看到一个循环app.py
每 20 秒成功地向它附加更多文本。
我遇到的问题是试图将更新后的voice.txt
文本放入index.html
. 我正在尝试使用 XMLHttpRequest 来做到这一点。以下是标签中的相关代码index.html
:
function UpdateText() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200) {
// Code goes here
document.getElementById("main").innerHTML = this.responseText;
console.log(statusText);
console.log(responseText);
}
};
xhttp.open("GET", "../Text/voice.txt", true);
xhttp.send();
};
当我运行时index.html
显示正确,但是当它尝试更新文本时,我在终端中收到以下错误消息:
127.0.0.1:64013 - - [28/May/2019 00:55:10] "HTTP/1.1 GET /Text/voice.txt" - 404 Not Found
我可能是错的,但在这一点上,我相当确定文件路径xhttp.open()
实际上应该是一个 URL(这是我第一次使用 XMLHttpRequest,我看到的每个教程都只有文件名,没有别的),在在这种情况下,我不确定如何链接到voice.txt
. 我为此使用了 web.py 库,这是相关部分app.py
:
urls = (
"/", "index",
)
indexpath = "/Users/[USERNAME]/torch/torch-rnn/voice/Template/"
render = web.template.render(indexpath)
class index(object):
def GET(self):
the_voice = open(voicepath, "r+").read()
return render.index(the_voice)
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
我觉得解决方案可能涉及更改urls
orrender
变量中的某些内容,但是我已经为此转了几个小时,但我没有想法。
我试过的
我首先想到的是将一个名为也称为模板文件夹的虚拟文件voice.txt
放入旁边的模板文件夹中,index.html
然后更改 XMLHttpRequest 中的文件路径以反映这一点,但我仍然收到相同的错误消息。
解决方案
您的网络服务器只知道一个 URL“ /
”,并在被询问为“https://:8080/”时将其返回。这就是您urls =()
在位中列出的所有可能值。
因此,您尝试通过 Web 界面获取其他任何内容都将失败。如果您想让网络服务器检索您的 voice.txt 文件,您需要将它包含在 中,或者与它匹配的东西,urls
然后让该类获取并发送该voice.txt
文件。(请注意,文件本身不在Text
文件夹中,它们可以在任何地方,如 所述myDirectory
。)
例如,
urls = ( "/", "index",
"/Text/(.*)", "get_file")
class get_file(object):
def GET(self, filename):
the_file = open(myDirectory + '/' + filename, "r").read()
return the_file
可能会做你想做的事(或给你一些想法)。通过使用 in 中的正则表达式urls
,任何 http get 像 '/Text/foo', '/Text/voice.txt', '/Text/ant_eater.jpg' 都会尝试读取文件 ('foo', 'voice.txt ', 'ant_eater.jpg') 中描述的目录中myDirectory
,并将该文件返回给用户。
如果您提供不同类型的文件(如我的示例),您还应该为内容类型设置标题,但这是一个不同的问题。
推荐阅读
- python - 当作为度量传递给 model.compile() 时,tf.keras.metrics.TruePositives() 在 model.fit() 中返回错误值
- php - PHP Mysqli 脚本取消定义偏移量
- json - 将多个带有 id 的 JSON 组合起来
- javascript - 了解 React 函数组件中的点击事件和内存
- java - 在 POST 上,传递对象 ID 而不是完整对象
- android - 房间:相互矛盾的声明
- python - 解析和创建嵌套字典
- android - 商店没有有效的减速器。确保传递给 combine reducers 的参数是一个其值为 reducers 的对象
- html - 导航栏定位 rtl ltr
- java - 带有 gRPC 的客户端服务器应用程序