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

点击提交按钮后无法在HTML页面获取响应,求技术建议

问题描述

我正在尝试制作一个简单页面,目标是点击"submit"按钮后,页面能显示响应内容"It works!"(这是我为熟悉这类编码环节所做的小练习,后续会拓展更复杂功能)。但目前点击按钮后无法在HTML页面中得到预期响应,以下是我的服务端与客户端代码,希望得到相关技术建议。


服务端代码

# get the response in html thru request

# http_local_server_test.py

import http.server
from http.server import BaseHTTPRequestHandler, HTTPServer
from logging import Handler
import requests
import socketserver
import json

#json_str = json.dumps({'name': 'Alice', 'age':29})

class Handler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):

        #if self.path =='/':
            #self.path = '/test.html'
        
        try:
            file_to_open = open(self.path[1:]).read()
            self.send_response(200)
            
        #this code execute when a GET request happens
            if self.path.find("isButtonPressed=true") != -1:
                print("Button clicked")
                
            #the result => ? return super().do_GET()
            
                return self.wfile.write(bytes("<p>It works!.</p>", "utf-8"))
                #self.send_header('Content-Type', 'application/json')
                #return self.wfile.write(json_str.encode(encoding='utf_8'))
        except:
            file_to_open = "File not found"
            self.send_response(404)
        self.end_headers()
        #self.wfile.write(bytes(file_to_open, 'utf-8'))

PORT = 8080
myHandler = Handler

with socketserver.TCPServer(("", PORT), myHandler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

客户端代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> INDEX TEST </title>
</head>

    <body>
        <!--<button onclick="">Get</button>-->
        <!-- CLIENT SIDE-->
        <!-- Get button -->
        <p> Text text text </p>
        <form action="/test.html">
            <input type="hidden" name="isButtonPressed" value="true">
            <input type="submit">
    </body>

</html>

问题分析与修复方案

服务端问题与修复

  1. 逻辑顺序错误:当前代码先尝试打开请求路径对应的文件,但点击按钮后请求路径是/test.html?isButtonPressed=true,这个路径无法对应到实际文件,会直接进入except分支,参数判断逻辑根本没机会执行。
  2. 响应流程不规范:HTTP响应必须遵循「发送状态码→设置响应头→结束头信息→写入响应内容」的流程,原代码跳过了响应头设置,且return语句会提前终止流程,导致end_headers()无法执行,响应内容无法正常返回。

修复后的服务端代码:

import http.server
import socketserver

class Handler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        # 优先处理按钮点击的参数请求
        if "isButtonPressed=true" in self.path:
            self.send_response(200)
            self.send_header('Content-Type', 'text/html; charset=utf-8')
            self.end_headers()
            self.wfile.write(bytes("<p>It works!</p>", "utf-8"))
            print("Button clicked")
            return
        
        # 处理正常的静态文件请求(剥离URL中的查询参数)
        try:
            file_path = self.path.split('?')[0][1:]
            file_content = open(file_path).read()
            self.send_response(200)
            self.send_header('Content-Type', 'text/html; charset=utf-8')
            self.end_headers()
            self.wfile.write(bytes(file_content, 'utf-8'))
        except:
            self.send_response(404)
            self.send_header('Content-Type', 'text/plain; charset=utf-8')
            self.end_headers()
            self.wfile.write(bytes("File not found", 'utf-8'))

PORT = 8080
with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

客户端问题与修复

  1. 标签未闭合:<form>标签缺少闭合标签</form>,会导致HTML结构异常,影响表单提交逻辑。
  2. 可选优化:明确指定表单的method="GET"(虽然默认是GET,但代码可读性更强),同时给提交按钮添加显示文本。

修复后的客户端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> INDEX TEST </title>
</head>
<body>
    <p> Text text text </p>
    <form action="/test.html" method="GET">
        <input type="hidden" name="isButtonPressed" value="true">
        <input type="submit" value="Submit">
    </form>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:50:45