1 ajax是什么?

ajax是Asynchronous JavaScript and XML的缩写,
ajax是一个前后端进行数据交互的技术, 它可以让Js发送异步的http请求, 与后台通信进行数据的获取

ajax不是新的编程语言,而是一种使用现有标准的新方法。
ajax最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行

jquery把ajax也封装了,可以通过jquery来使用ajax
image.png

2 ajax发送get请求

(1) html代码示例

  1. <script src="js/jquery-1.12.4.min.js"></script>
  2. <script>
  3. // 向web服务器发送ajax请求,本质是一个http请求
  4. // $.ajax({
  5. // url: "data.json", // 请求的资源地址, 不指定ip和port表示请求本机的资源数据
  6. // type: "GET", // 请求方式
  7. // dataType: "JSON", // 指定解析数据的格式
  8. // success:function(response){ // 请求成功后执行的函数
  9. // console.log(response)
  10. // },
  11. // error:function(){
  12. // alert("请求失败,请稍后再试!")
  13. // },
  14. // //async: true // 是否使用异步, 默认是true
  15. // })
  16. // 发送get方式的ajax请求可简写
  17. $.get("data.json", function(response){
  18. alert(response.name)
  19. }, "JSON").error(function(){
  20. alert("请求失败,请稍后再试!")
  21. })
  22. </script>

(2) 打开cmd

cd到data.json所在目录
image.png

(3) 本机开启http服务器

python -m http.server

image.png

(4) 在浏览器上向本机http服务器请求29-ajax.html

http://localhost:8000/29-ajax.html

image.png

image.png

3 ajax发送post请求

由于python自带的http服务器不支持post请求, 错误码501
image.png
这次我们用自己写的服务器来接收post请求

(1) html代码示例

  1. <script src="js/jquery-1.12.4.min.js"></script>
  2. <script>
  3. $.post("data.json", {"func": "getName"}, function(response){
  4. alert(response.name)
  5. }, "JSON").error(function(){
  6. alert("请求失败,请稍后再试!")
  7. })
  8. </script>

(2) 把数据拷贝到项目目录的static文件夹

image.png

(3) 在终端开启, 运行http服务器

  1. from socket import *
  2. import os
  3. from threading import Thread
  4. import sys
  5. class HttpWebServer():
  6. def __init__(self, port):
  7. server_socket = socket(AF_INET, SOCK_STREAM)
  8. server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, True)
  9. server_socket.bind(("", port))
  10. server_socket.listen(128)
  11. self.server_socket = server_socket
  12. # 处理客户端请求
  13. @staticmethod
  14. def handle_client_request(new_socket):
  15. recv_data = new_socket.recv(4096)
  16. if len(recv_data) == 0:
  17. new_socket.close()
  18. return
  19. recv_content = recv_data.decode("utf-8")
  20. print(recv_content)
  21. request_list = recv_content.split(" ", maxsplit=2)
  22. request_path = request_list[1]
  23. print(request_path)
  24. if request_path == "/":
  25. request_path = "/index.html"
  26. try:
  27. with open("static" + request_path, "rb") as f:
  28. file_data = f.read()
  29. except Exception as e:
  30. response_line = "HTTP/1.1 404 Not Found\n"
  31. response_header = "Server: PWS/1.0\n"
  32. with open("static/error.html", "rb") as f:
  33. file_data = f.read()
  34. else:
  35. response_line = "HTTP/1.1 200 OK\n"
  36. response_header = "Server: PWS/1.0\n"
  37. finally:
  38. response_body = file_data
  39. response = (response_line + response_header + "\n").encode("utf-8") + \
  40. response_body
  41. new_socket.send(response)
  42. new_socket.close()
  43. def start(self):
  44. while True:
  45. print("等待客户端...")
  46. new_socket, ip_port = self.server_socket.accept()
  47. t = Thread(target=self.handle_client_request, args=(new_socket,), daemon=True)
  48. t.start()
  49. def main():
  50. print(sys.argv)
  51. # 判断命令行参数是否等于2
  52. if len(sys.argv) != 2:
  53. print("正确的命令格式如下:python xxx.py 8000")
  54. return
  55. # 判断字符串是否都是数字组成
  56. if not sys.argv[1].isdigit():
  57. print("正确的命令格式如下:python xxx.py 8000")
  58. return
  59. port = int(sys.argv[1])
  60. web_server = HttpWebServer(port)
  61. web_server.start()
  62. if __name__ == "__main__":
  63. main()

image.png

(4) 请求成功

image.png