码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 5.XMLHttpRequest对象


    XMLHttpRequest简称xhr,是浏览器提供的Javascript对象。之前我们使用的都是jQuery中的Ajax,现在我们使用原生JS的Ajax

    目录

    1  GET请求

    1.1  不带参数请求

    1.2  带参数请求

    2  URL的编码与解码

    2.1  编码 encodeURI()

    2.2  解码 decodeURI()

    3  POST请求

    4  模拟jQuery中的Ajax函数

    1  GET请求

    1.1  不带参数请求

    先看服务

    前端请求

    • xhr.open()中可以写大写的GET,也可以写小写的GET
    • xhr.readyState与xhr.status写死就行,如果请求成功就需要这两个条件

    xhr.readyState代表请求的状态,4代表请求已经完成了,除了4之外还有下面这几种状态

    1.2  带参数请求

    先看服务,当你传入data1和data2后,服务会将两个值变成整数然后加和,之后返回给你

    get请求直接将要传递的东西放在查询字符串中就可以了,无论什么框架带参数的get请求数据实质上都是以查询字符串的形式传递的

    2  URL的编码与解码

    url地址中只允许出现字母,标点符号,数字,想是中文这种字符会被自动编码

    比如说你在百度上搜索 我 这个汉字,实质上就会编码为%E6%88%91,一般来讲一个汉字就对应着三个百分号值

    2.1  编码 encodeURI()

    2.2  解码 decodeURI()

    3  POST请求

    服务

    请求

    post请求需要使用setRequestHeader()设置请求头,这个是固定写法,setRequestHeader()必须放在open()的后面,send()的前面

    post要发送的数据要写在send()中

    4  模拟jQuery中的Ajax函数

    我们只考虑get与post的情况,需要处理的地方就是将传入的data对象转变为查询字符串的形式,判断是get还是post,除此之外简单弄一弄就行了

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. body>
    11. <script>
    12. function myAjax(resquest_obj) {
    13. xhr = new XMLHttpRequest()
    14. if (/^GET$/i.test(resquest_obj.type)) {
    15. send_str = ''
    16. for (i in resquest_obj.data) {
    17. send_str = send_str + i + '=' + resquest_obj.data[i] + '&'
    18. }
    19. send_str = send_str.slice(0,-1)
    20. resquest_obj.url = resquest_obj.url + '?' + send_str
    21. xhr.open(resquest_obj.type,resquest_obj.url)
    22. xhr.send()
    23. xhr.onreadystatechange = function() {
    24. if (xhr.readyState === 4 && xhr.status === 200) {
    25. resquest_obj.success(xhr.responseText)
    26. }
    27. }
    28. }
    29. else if (/^POST$/i.test(resquest_obj.type)) {
    30. xhr.open(resquest_obj.type,resquest_obj.url)
    31. xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
    32. send_str = ''
    33. for (i in resquest_obj.data) {
    34. send_str = send_str + i + '=' + resquest_obj.data[i] + '&'
    35. }
    36. send_str = send_str.slice(0,-1)
    37. xhr.send(send_str)
    38. xhr.onreadystatechange = function() {
    39. if (xhr.readyState === 4 && xhr.status === 200) {
    40. resquest_obj.success(xhr.responseText)
    41. }
    42. }
    43. }
    44. }
    45. script>
    46. html>

    搞一个服务测一下,get是两个数相加,post是两个数相乘

    get

    post

  • 相关阅读:
    2024华为校招面试真题汇总及其解答(二)
    字符串的转换路径问题
    《LeetCode力扣练习》代码随想录——链表(设计链表---Java)
    Cadence OrCAD Capture 全局修改TitleBlock信息
    数据结构之队列的实现(附源码)
    第二章——古典密码学及算法实现
    考研英语不熟悉的词义(List11-List15)
    国考省考行测:问题型材料主旨分析,有问题有对策,主旨是对策,有问题无对策,要合理引申对策
    【HMS core】【FAQ】音频编辑服务、推送服务、AR Engine典型问题合集
    【LeetCode每日一题】——72.编辑距离
  • 原文地址:https://blog.csdn.net/potato123232/article/details/128032621
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号