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 os
from threading import Thread
import sys
class 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
# 处理客户端请求
@staticmethod
def handle_client_request(new_socket):
recv_data = new_socket.recv(4096)
if len(recv_data) == 0:
new_socket.close()
return
recv_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_data
response = (response_line + response_header + "\n").encode("utf-8") + \
response_body
new_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)
# 判断命令行参数是否等于2
if len(sys.argv) != 2:
print("正确的命令格式如下:python xxx.py 8000")
return
# 判断字符串是否都是数字组成
if not sys.argv[1].isdigit():
print("正确的命令格式如下:python xxx.py 8000")
return
port = int(sys.argv[1])
web_server = HttpWebServer(port)
web_server.start()
if __name__ == "__main__":
main()