💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 1、编码字符 为什么要编码: ![](https://img.kancloud.cn/48/d6/48d6d3e81e60dd1fb236924fd1a9b31c_679x454.png) 解决的办法就是对用户输入的内容进行编码。 ``` encodeURI() --- 不能对“:/=&”进行编码,能对汉字进行编码 encodeURIComponent() --- 能对“:/=&”进行编码,也能对汉字进行编码 ``` ![](https://img.kancloud.cn/43/88/43883bce032b1ecfdfcc3a44d6b19218_1072x501.png) 一般情况下,JS编码后发送到服务器,PHP会自动解码,如果没有自动解码,用PHP的函数urldecode来解码。 # 2、缓存处理 什么是Ajax缓存原理? Ajax在发送的数据成功后,会把请求的URL和返回的响应结果保存在浏览器缓存内,当下一次调用Ajax发送相同的请求时,它会直接从缓存中把数据取出来,这是为了提高页面的响应速度和用户体验。当前这两次请求URL完全相同,包括参数。这个时候,浏览器就不会与服务器交互。 两次请求的地址完全一致(包括参数),那么IE就会从缓存中取服务器上一次返回的结果。而不会从新向服务器发送请求。 测试方法: 先输入一个不存在的用户名,比如bbb,失去焦点,发送一次Ajax请求,然后不刷新页面。打开php文件,向数组中加入用户名bbb。回到浏览器,还不能刷新,再次失去焦点。如下图 ![](https://img.kancloud.cn/a0/58/a058c57484bf0e5fc8be2c4719c8308e_978x502.png) > 如何解决IE缓存的问题: > 1、在ajax发送请求前加上 xhr.setRequestHeader("If-Modified-Since","0"); //实测可用 > 2、在服务器端加 > header("Cache-Control:no-cache"); > header("Pragma:no-cache"); > header("Expires:-1"); > 加入三个header,目的是让所有的浏览器都不缓存。 > 3、在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //当然这里参数 fresh 可以任意取了 > 4、第种方法和第3种类似,在 URL 参数后加上 "?timestamp=" + new Date().getTime(); > ![](https://img.kancloud.cn/99/ab/99ab1f15fa4f7d7bf92cb5a6e0d4b12a_1001x499.png) > 5、用POST替代GET:不推荐 > 以上几种方式,比较推荐第3和第4中方法。 # 3、get和post请求 使用POST请求: xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); ![](https://img.kancloud.cn/09/54/0954e66817bba98c43b80f4c49b24818_1098x332.png) 服务器接收数据用$_POST. ![](https://img.kancloud.cn/4a/96/4a96aa211255570f20bb0799dd243793_844x359.png) > ajax中的get和post的一些说明: > ①、用post请求,不会产生缓存。 > ②、用post请求的时候,能不能也用get,即post和get请求同时使用。答案是能,只不过get请求的参数用$_GET获取,post请求的参数用$_POST获取。 > ③、用$_REQUEST获取get和post方式提交的参数,如果参数名相同,获取的是谁?获取的是post的内容 # 4、同步、异步 同步请求,在同一个时间点上,只能有一个进程;其他进程只能等待。 异步请求,在同一个时间点上,可以同时进行多个进程。 open方法的第三个参数表示同步或者是异步请求。默认值true表示异步请求,false表示同步请求。 ![](https://img.kancloud.cn/f5/57/f557e126706a34767af5a06c6178b85e_763x402.png) # 5、请求的url如果出错怎么办 ![](https://img.kancloud.cn/43/20/43209914c0825d99cba6ba6e2cf0eea7_711x337.png) 以后写Ajax的时候,不但要判断readyState的值是否为4,还要判断http状态码status属性的值是否是200.