【发布时间】:2015-12-09 21:49:44
【问题描述】:
我是 JavaScript 和 AJAX 的新手。对一般网络通信来说也是新手。
我正在尝试创建一个与 Python 服务器通信的动态更新网页。我一直在本地测试所有内容,到目前为止一切正常。我认为。
Python 服务器在 localhost 端口 8000 上提供“page.html”。HTML 页面使用 AJAX 和 XMLHttpRequest 将数据 POST 到服务器。我可以向服务器发送数据就好了。
问题出在这里:我的服务器表明,对于每个帖子,都会打开一个新的客户端端口。这让我很害怕,因为我习惯了在单个端口上进行通信的 TCP 套接字。
这是服务器代码(server.py):
import cgi
import http.server
import urllib
import socketserver
class ServerHandler(http.server.SimpleHTTPRequestHandler):
def do_POST(self):
ctype, pdict = cgi.parse_header(self.headers['content-type'])
length = int(self.headers['content-length'])
postvars = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8'))
ip, port = self.client_address
print(ip, "@", port, "-->", postvars)
def start_server():
httpServer = socketserver.TCPServer(("", 8000), ServerHandler)
httpServer.serve_forever()
if __name__ == "__main__":
start_server()
这是 HTML 代码 (page.html):
<html>
<head></head>
<body>
<script type="text/javascript">
function send_receive() {
var http = new XMLHttpRequest();
var data = document.test_form.data.value;
var params = "data=" + data.toString();
http.open("POST", "page.html", true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.send(params);
}
</script>
<form name=test_form>
Data: <input type="text" name="data" value="1">
<input type=button onClick="send_receive();" value="Send"><br /><br />
</form>
</body>
</html>
这是在页面上发送 1 到 6 后的服务器输出。
127.0.0.1 @ 52884 --> {'data': ['1']}
127.0.0.1 @ 52885 --> {'data': ['2']}
127.0.0.1 @ 52886 --> {'data': ['3']}
127.0.0.1 @ 52887 --> {'data': ['4']}
127.0.0.1 @ 52888 --> {'data': ['5']}
127.0.0.1 @ 52889 --> {'data': ['6']}
要测试启动 server.py,然后转到浏览器并输入
http://localhost:8000/page.html OR http://127.0.0.1:8000/page.html
您可以看到每个 POST 的端口增量。有什么我做错了吗?我觉得 XHR 挥之不去,需要关闭,但从我在网上阅读的内容来看,显然每个 POST 都需要创建一个新的 XHR。谢谢!
【问题讨论】:
标签: javascript python ajax post xmlhttprequest