You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ajax从JavaScript调用Python脚本遇404 Not Found错误求助

解决Ajax调用Python脚本时的404错误问题

Hey there, let's break down what's happening here and fix it:

问题根源

你现在应该是用的静态文件服务器(比如VS Code的Live Server、Python自带的http.server默认模式这类)来托管你的文件。这类服务器的作用只是把文件原封不动地返回给浏览器——所以当你直接访问http://127.0.0.1:8887/text.py时,它只会把Python代码当作文本显示,根本不会执行脚本。

而当你用Ajax发POST请求时,静态服务器要么因为不支持POST请求静态文件返回404,要么就算返回内容,也是脚本源码,不是你想要的执行结果。

解决方案:让服务器能执行Python脚本

你不需要用Flask(虽然它很方便),用Python自带的工具就能搞定,下面给你两个简单的方案:

方案1:用支持CGI的静态服务器

CGI是一种让服务器执行脚本的旧标准,Python自带支持:

  • 第一步:给你的text.py开头加上shebang(Windows可以跳过,Linux/macOS需要):
    #!/usr/bin/env python3
    
  • 第二步:如果是Linux/macOS,给脚本加执行权限:
    chmod +x text.py
    
  • 第三步:把text.py放到一个名为cgi-bin的文件夹里(这是CGI服务器默认的脚本目录)
  • 第四步:启动支持CGI的服务器:
    python -m http.server --cgi 8887
    
  • 第五步:修改你的Ajax请求URL为http://127.0.0.1:8887/cgi-bin/text.py,这样服务器就会执行脚本并返回结果了。

方案2:用WSGI写极简后端

如果觉得CGI麻烦,用Python自带的wsgiref写一个超简单的后端:

  1. 创建一个server.py文件,内容如下:
from wsgiref.simple_server import make_server
import cgi

def application(environ, start_response):
    # 只处理POST请求
    if environ['REQUEST_METHOD'] == 'POST':
        # 解析POST过来的数据
        form_data = cgi.FieldStorage(
            fp=environ['wsgi.input'],
            environ=environ,
            keep_blank_values=True
        )
        
        # 这里把你原来text.py里的逻辑放进来
        # 比如假设你要处理表单里的content参数:
        user_input = form_data.getvalue('content', '')
        result = f"你输入的内容是:{user_input}"
        
        # 返回响应
        status = '200 OK'
        headers = [('Content-type', 'text/plain; charset=utf-8')]
        start_response(status, headers)
        return [result.encode('utf-8')]
    else:
        # 处理非POST请求
        status = '405 Method Not Allowed'
        headers = [('Content-type', 'text/plain; charset=utf-8')]
        start_response(status, headers)
        return [b"只接受POST请求哦"]

if __name__ == '__main__':
    # 启动服务器
    httpd = make_server('127.0.0.1', 8887, application)
    print("服务器运行在 http://127.0.0.1:8887")
    httpd.serve_forever()
  1. 运行python server.py启动服务器
  2. 修改你的Ajax请求URL为http://127.0.0.1:8887,这样就能触发Python脚本的逻辑并拿到返回结果了。

最后再强调一下

静态服务器只能返回文件内容,不能执行代码——这就是为什么你直接访问能看到Python源码,但Ajax请求得不到正确响应的原因。上面的两个方案都能让服务器执行你的Python脚本,选哪个全看你觉得哪个更顺手~

内容的提问来源于stack exchange,提问作者Ore Arowobusoye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:52:51