AJAX(Asynchronous JavaScript And Xml)、get和post请求、url和跨域问题、JSON.parse和JSON.stringify方法

目录

AJAX作用

AJAX用法(文字介绍)

XMLHttpRequest方法

XMLHttpRequest()

xml.open(method, url, async)

xml.setRequestHeader(name,value)

xml.send(string)

xml.getAllResponseHeaders()

xml.getResponseHeader(name)

xml.abort()

XMLHttpRequest属性

xml.onreadystatechange

xml.status

xml.statusText

xml.responseText

xml.responseXML

AJAX实例

服务器端响应请求注意

GET请求和POST请求

GET请求

发送数据存储位置

注意和要求

POST请求

发送数据存储位置

注意和要求

区别总结

url

url组成结构

跨域问题

如何解决跨域

encodeURIComponent(str)

JSON

JSON.parse(str)

JSON.stringify(obj)


AJAX作用

  1. 不刷新页面更新网页。
  2. 在页面加载后从服务器请求数据。
  3. 在页面加载后从服务器接收数据。
  4. 在后台向服务器发送数据。

AJAX用法(文字介绍)

  1. 创建一个异步XMLHttpRequest对象。
  2. 设置请求方式和请求地址(open方法,需设置请求地址,请求方法get或者post,同步或异步)。
  3. 发送请求(send方法)。
  4. 监听状态的变化(通过监听事件onreadystatechange)。
  5. 处理返回的结果。

XMLHttpRequest方法

XMLHttpRequest()

通过var xml = new XMLHttpRequest()创建AJAX对象。IE5~IE6使用var xml = new ActiveXObject('Microsoft.XMLHTTP')。

xml.open(methodurlasync)

设置请求方式和请求地址等,method为请求方式包括'get'和'post';url为请求文件地址(提交数据地址);async为设置请求是异步还是同步,一般只传true,为异步。

xml.setRequestHeader(name,value)

设置请求头中属性和值,一次只能设置一条(设置多条则写多条setRequestHeader语句),当post请求时,send中如果发送了数据,需要在send前,open后添加一条xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");发送的数据才会被正常解析。

xml.send(string)

当传入string时,xml发送post请求,string为post携带的数据,格式为key1=value1&key2=value2&....&keyn=valuen的字符串。

xml.getAllResponseHeaders()

返回所有的响应头信息。

xml.getResponseHeader(name)

返回响应头信息中的name属性的值。

xml.abort()

消失当前请求(xml中所有内容清空)。

XMLHttpRequest属性

xml.onreadystatechange

xml对象的状态改变事件即xml.readyState的改变。xml.readyState有5个值0~4,0:请求未初始化;1:服务器连接已建立;2:请求已收到;3:正在处理请求;4:请求已完成且响应已就绪;当状态位为4且xml.status>=200&&xml<300||xml.status===304时,我们才能接收到服务器的响应内容并做处理。

xml.status

响应状态码,为数字,不同数字代表了不同的xml.statusText,200:"OK";403:"Forbidden";404:"Not Found"等;

xml.statusText

响应状态码对应的文本。

xml.responseText

服务器返回前端的文本,为字符串,例如请求服务器中php文件,则该字符串为所有echo内容的连接;如果为txt文件,该字符串为txt的所有内容

xml.responseXML

当服务器的返回数据为xml时,以此接收的是xml的根节点,类似#document,可以通过getElementsByTagName等方法获取需要内容。

AJAX实例

AJAX 实例 | 菜鸟教程

服务器端响应请求注意

  1. 注意在php执行结果有中文时,为防止乱码,需要添加header('content-type:text/html; charset=utf-8')
  2. 如果php需要返回xml时,需要添加header('content-type:text/xml; charset=utf-8')
  3. php中通过echo file_get_contents(filename:url)返回xml文件,其中参数为url,代表返回xml文件的地址。

GET请求和POST请求

GET请求

发送数据存储位置

通过把数据携带在url地址中,例如url='get请求_百度搜索',其中https://www.baidu.com/s之后的为get提交的数据,以?连接。

我们也可以在控制台中查看,如下图所示,打开我们的控制台中的Network,找到我们请求发送数据的地址,图中为hello.php,?后面连接的就是数据,然后在Headers请求头中最下面Query String Parameters也是我们发送的数据,图中为userPwd:aaa。

注意和要求

  1. 大小要求小于2000字符。
  2. 不用于发送敏感信息(发送信息暴露在url地址中)。
  3. php中以$_GET接收。
  4. IE浏览器中的get请求,浏览器认为同一个url只有同一个结果即多次请求同一个url地址会拿到同一个内容(不是实时的),通常我们在url后面添加数据来保证url不同,来确保每次拿到实时数据,比如添加t=Date.now()。

POST请求

发送数据存储位置

存储在请求头中,如图所示,打开我们的控制台中的Network,找到我们请求发送数据的地址,图中为hello.php,在Headers请求头中最下面Form Data为我们发送的数据内容,图中为userPwd:jj。

注意和要求

  1. 无大小要求。
  2. 常用于发送敏感数据。
  3. php中以$_POST接收。
  4. HTML表单的默认编码类型为enctype='application/x-www-form-urlencoded',当传递文件(图片)时,需要改为enctype='multipart/form-data',而且在php中要以$_FILES接收,上传的文件会保存在tmp文件夹中,该文件夹为临时文件夹,如果间隔一段时间未使用,会自动清空该文件夹中内容(所以一般查看不到接收的文件),只有通过move_uploaded_file($originPath,$targetPath)转移文件地址,$originPath代表原来接收的地址,$targetPath代表新接收地址,这些地址是包含了接收文件的文件名的。
  5. 通过软件搭建的服务器一般设置有限制post请求大小、请求时长等。例如Wampserver软件,我们需要在安装的文件夹下的\bin\apache\apache2.4.37\bin\的php.ini文件,用编程工具打开修改以下内容为想要的大小,然后重启该软件。
file_uploads=On
<!-- 上传文件开关 -->
upload_max_filesize = 2M
<!-- 最大上传文件大小 -->
post_max_size = 2M
<!-- post请求上传文件最大大小 -->
max_execution_time=1000
<!-- 最长执行事件 -->
max_input_time = 1000
<!-- 提交数据时间限制 -->
memory_limit=128M
<!-- 最大内存消耗 -->

区别总结

  1. GET在浏览器回退时是无害的,而POST会再次提交请求
  2. GET产生的UR地址可以被收藏,而POST不可以
  3. GET请求会被浏览器主动缓存,而POST不会,除非手动设置
  4. GET请求只能进行ur|编码,而POST支持多种编码方式
  5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
  6. GET请求在URL中传送的参数是有长度限制的,而POST没有限制
  7. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制
  8. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
  9. GET参数通过URL传递,POST放在Request body中 。
     

url

url组成结构

url为打开网页的完全的地址,例如(未包括get请求的数据,后连接?key1=value1&key2=value2&....&keyn=valuen)AJAX - XMLHttpRequest 对象,其中包括ip地址为https://www.w3school.com.cn/,ip地址是从后往前看,cn代表china,com代表商业网站,它域名为w3school注意HTML表单和JavaScript的方法中提交的url只要不是以https://开头的,它请求的地址都会是当前打开的网页的ip地址拼接提交的url,而不是重新打开一个url。url包括ip地址和服务器下文件的地址,例中为/js/js_ajax_http.asp

跨域问题

由于安全问题,浏览器禁止跨域访问,例如https://www.w3school.com.cn/js/js_ajax_http.asp这个网站的异步AJAX请求只能访问,该服务器下的文件内容https://www.w3school.com.cn/下内容即同一台服务器的内容(同一ip地址)。

如何解决跨域

如何解决跨域_YF-SOD的博客-CSDN博客

encodeURIComponent(str)

注意URL中不能出现中文,我们可以通过encodeURIComponent(str),将str转换为符合要求的字符串。

JSON

JavaScript 对象表示法(JavaScript Object Notation)。

JSON.parse(str)

将类似于对象的字符串str转化为对象返回。例如str='{"name":"Bill Gates", "age":62, "city":"Seattle"}'通过该方法能转化为对象{"name":"Bill Gates", "age":62, "city":"Seattle"}。注意str的写法上属性要带有引号。

JSON.stringify(obj)

将对象obj转化为类似于对象的字符串返回。例如obj={"name":"Bill Gates", "age":62, "city":"Seattle"}通过该方法能转化为字符串'{"name":"Bill Gates", "age":62, "city":"Seattle"}'。注意obj即使属性上定义时不带引号,返回的类似对象的字符串上的属性也带有引号。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值