1 ajax是什么?
ajax是Asynchronous JavaScript and XML的缩写,
ajax是一个前后端进行数据交互的技术, 它可以让Js发送异步的http请求, 与后台通信进行数据的获取
ajax不是新的编程语言,而是一种使用现有标准的新方法。
ajax最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行
jquery把ajax也封装了,可以通过jquery来使用ajax
2 ajax发送get请求
(1) html代码示例
<script src="js/jquery-1.12.4.min.js"></script><script>// 向web服务器发送ajax请求,本质是一个http请求// $.ajax({// url: "data.json", // 请求的资源地址, 不指定ip和port表示请求本机的资源数据// type: "GET", // 请求方式// dataType: "JSON", // 指定解析数据的格式// success:function(response){ // 请求成功后执行的函数// console.log(response)// },// error:function(){// alert("请求失败,请稍后再试!")// },// //async: true // 是否使用异步, 默认是true// })// 发送get方式的ajax请求可简写$.get("data.json", function(response){alert(response.name)}, "JSON").error(function(){alert("请求失败,请稍后再试!")})</script>
(2) 打开cmd
(3) 本机开启http服务器
python -m http.server
(4) 在浏览器上向本机http服务器请求29-ajax.html


3 ajax发送post请求
由于python自带的http服务器不支持post请求, 错误码501
这次我们用自己写的服务器来接收post请求
(1) html代码示例
<script src="js/jquery-1.12.4.min.js"></script><script>$.post("data.json", {"func": "getName"}, function(response){alert(response.name)}, "JSON").error(function(){alert("请求失败,请稍后再试!")})</script>
(2) 把数据拷贝到项目目录的static文件夹
(3) 在终端开启, 运行http服务器
from socket import *import osfrom threading import Threadimport sysclass HttpWebServer():def __init__(self, port):server_socket = socket(AF_INET, SOCK_STREAM)server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, True)server_socket.bind(("", port))server_socket.listen(128)self.server_socket = server_socket# 处理客户端请求@staticmethoddef handle_client_request(new_socket):recv_data = new_socket.recv(4096)if len(recv_data) == 0:new_socket.close()returnrecv_content = recv_data.decode("utf-8")print(recv_content)request_list = recv_content.split(" ", maxsplit=2)request_path = request_list[1]print(request_path)if request_path == "/":request_path = "/index.html"try:with open("static" + request_path, "rb") as f:file_data = f.read()except Exception as e:response_line = "HTTP/1.1 404 Not Found\n"response_header = "Server: PWS/1.0\n"with open("static/error.html", "rb") as f:file_data = f.read()else:response_line = "HTTP/1.1 200 OK\n"response_header = "Server: PWS/1.0\n"finally:response_body = file_dataresponse = (response_line + response_header + "\n").encode("utf-8") + \response_bodynew_socket.send(response)new_socket.close()def start(self):while True:print("等待客户端...")new_socket, ip_port = self.server_socket.accept()t = Thread(target=self.handle_client_request, args=(new_socket,), daemon=True)t.start()def main():print(sys.argv)# 判断命令行参数是否等于2if len(sys.argv) != 2:print("正确的命令格式如下:python xxx.py 8000")return# 判断字符串是否都是数字组成if not sys.argv[1].isdigit():print("正确的命令格式如下:python xxx.py 8000")returnport = int(sys.argv[1])web_server = HttpWebServer(port)web_server.start()if __name__ == "__main__":main()
(4) 请求成功

