XMLHttpRequest Returns 404 即使文件存在
XMLHttpRequest Returns 404 Even Though File Exists
这就是我的项目的文件结构。语音、文本和模板是文件夹。
我 运行 python app.py
,当我转到本地主机 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 和每个教程我只看到了文件名,没有其他内容),在这种情况下,我不确定如何 link 到 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
或 render
变量中的某些内容,但我一直在兜圈子几个小时,但我没有想法.
我试过的
我首先想到的是将一个名为 voice.txt
的虚拟文件放入 index.html
旁边的模板文件夹中,然后更改 XMLHttpRequest 中的文件路径以反映这一点,但我仍然得到了同样的错误信息。
您的 Web 服务器 仅 知道一个 URL “/
” 并且 return 当被问到 'https://:8080/'.这就是您在 urls =()
位中列出的所有可能值。
因此,您尝试通过 Web 界面获取任何其他内容都将失败。如果你想让网络服务器检索你的 voice.txt 文件,你需要将它或匹配它的东西包含在 urls
中,然后让 class 获取并发送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
可能会做你想做的事(或给你一些想法)。通过使用 urls
中的正则表达式,任何 http get like '/Text/foo', '/Text/voice.txt', '/Text/ant_eater.jpg' 将尝试读取文件 ( 'foo'、'voice.txt'、'ant_eater.jpg') 在 myDirectory
描述的目录中,并且 return 该文件给用户。
如果您提供不同类型的文件(如我的示例),您还应该为内容类型设置 headers,但这是一个不同的问题。
这就是我的项目的文件结构。语音、文本和模板是文件夹。
我 运行 python app.py
,当我转到本地主机 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 和每个教程我只看到了文件名,没有其他内容),在这种情况下,我不确定如何 link 到 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
或 render
变量中的某些内容,但我一直在兜圈子几个小时,但我没有想法.
我试过的
我首先想到的是将一个名为 voice.txt
的虚拟文件放入 index.html
旁边的模板文件夹中,然后更改 XMLHttpRequest 中的文件路径以反映这一点,但我仍然得到了同样的错误信息。
您的 Web 服务器 仅 知道一个 URL “/
” 并且 return 当被问到 'https://:8080/'.这就是您在 urls =()
位中列出的所有可能值。
因此,您尝试通过 Web 界面获取任何其他内容都将失败。如果你想让网络服务器检索你的 voice.txt 文件,你需要将它或匹配它的东西包含在 urls
中,然后让 class 获取并发送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
可能会做你想做的事(或给你一些想法)。通过使用 urls
中的正则表达式,任何 http get like '/Text/foo', '/Text/voice.txt', '/Text/ant_eater.jpg' 将尝试读取文件 ( 'foo'、'voice.txt'、'ant_eater.jpg') 在 myDirectory
描述的目录中,并且 return 该文件给用户。
如果您提供不同类型的文件(如我的示例),您还应该为内容类型设置 headers,但这是一个不同的问题。