一、客户端服务

1. 基本概念
2. 客户端与服务通信过程:请求-处理响应

3. 资源请求:XMLHttpRequest对象

二、Ajax概念应用场景

1. Ajax(Asynchronous JS And XML)

异步JS和XML。理解为在网页利用XMLHttpRequest对象服务器进行数据交互方式。让我们轻松实现网页服务之间数据通信

2. Ajax应用

三、jQuery封装请求方法

jQuery对XMLHttpRequest进行封装,提供了一些列相关函数,降低Ajax难度

$.get(url,[data],[callback])
$.post(url,[data],[callback])
$.ajax({
	type:'', //请求方法:GET,POST...
	url:'',  //请求的URL地址
	data:{}  //请求携带的参数
	success:function(res){} //请求成功回调函数
})

四、接口测试工具Postman

1. 数据接口

Ajax请求数据时被请求的URL地址叫数据接口。每个数接口必须有请求方式

2. 接口文档

接口的说明文档,是调用接口的依据可以方便知道接口的作用如何调用

3. 接口测试工具【以Postman为例

可以方便的直接对接口进行调用及测试,不需要代码

  • GET方式
  • POST方式

五、表单form

1. 表单作用

表单主要负责数据采集功能通过<form&gt;标签提交表单操作可以采集到的信息提交到服务器端进行处理

2. 表单组成
3. 表单属性:规定如何采集到的数据发送到服务器
4. Ajax提交表单数据

问题】表单提交数据存在页面跳转前数据及状态丢失问题
所以,让表单只负责采集数据,Ajax负责将数据提交到服务器
1)Ajax监听 表单提交事件

// 两种方式
$('#form1').submit(function(e){
	alert('监听到了表单提交事件')
})
$('#form1').on('submit',function(e){
	alert('监听到了表单提交事件')
})

2)阻止表单默认跳转行为

e.preventDefault()

3)获取表单数据[必须为每个表单元素添加name属性]

var data = $('#form1').serialize() //username=ll&amp;age=18

六、XMLHttpRequest与XMLHttpRequest Level2

1. XMLHttpRequest

XMLHttpRequest是浏览器提供的JS对象通过可以请求服务器上的数据资源

2. XMLHttpRequest发起GET请求
// 1. 创建XHR对象
	var xhr = new XMLHttpRequest()
// 2. 调用open函数【创建请求】
// GET请求将参数以“查询字符串”的形式追加到URL后面
	xhr.open('GET', 'http://www.liulongbin.top:3006/api/getbooks?id=1')
// 3. 调用send函数【发起请求】
	xhr.send()
// 4. 监听onreadystatechange事件
	xhr.onreadystatechange = function () {
		// 请求状态xhr.readyState  响应状态xhr.status
  		if (xhr.readyState === 4 &amp;&amp; xhr.status === 200) {
    		// 获取服务器响应的数据xhr.responseText
    		console.log(xhr.responseText)
  		}
	}
// URL编码 encodeURI()
var str1 = encodeURI('程序员') // %E7%A8%8B%E5%BA%8F%E5%91%98
// URL解码 decodeURI()
var str2 = decodeURI('%E7%A8%8B%E5%BA%8F%E5%91%98') // 程序员
3. XMLHttpRequest发起POST请求
// 1. 创建xhr对象
    var xhr = new XMLHttpRequest()
// 2. 调用open函数【创建请求】
    xhr.open('POST', 'http://www.liulongbin.top:3006/api/addbook')
// 3. 设置Content-Type属性【编码方式】
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
// 4. 调用send函数【发起请求并携带参数】
    xhr.send('bookname=水浒传&amp;author=施耐庵&amp;publisher=上海图书出版社')
// 5. 监听事件
    xhr.onreadystatechange = function () {
    // 请求状态xhr.readyState  响应状态xhr.status
      if (xhr.readyState === 4 &amp;&amp; xhr.status === 200) {
      	// 获取服务器响应的数据xhr.responseText(JSON格式的数据)
        console.log(xhr.responseText)
        // JSON转换为JS对象
        JSON.parse(xhr.responseText)
      }
    }
4. 数据交换格式

服务器端客户端之间进行数据传输交换的格式。
前端主要是XMLJSON
1)XML(Extensible Markup Language)可扩展标记语言
HTML是网页内容的载体,XML是数据的载体。

<note>
	<to>zz</to>
	<from>pp</from>
	<heading>通知</heading>
	<body>晚上开会</body>
</note>

2)JSON(JavaScript Object Notation)JS对象表示法本质字符串

对象结构:{“key”:value, “key”:value… }。key必须双引号包含字符串value可以数值字符串布尔值null数组、对象 6种类型。不能包含undefined和函数形式的值。

{
	"name":"pp",
	"age":20,
	"gender":"女",
	"address":null,
	"hobby":["吃饭","睡觉","写代码"]
}

数组结构:[value, value, …]。value可以数值、字符串布尔值null、数组、对象 6种类型。不能包含undefined和函数形式的值。

["java", 100, false, null, [4,5,6], {"name":"pp","age":20}]
  • JSON与JS对象相互转换
// JSON.stringify(obj) JS对象转换为JSON 
var obj = { a: 'hello', b: 'world', c: false }
var str = JSON.stringify(obj) // {"a":"hello","b":"world","c":false}
// JSON.parse(json)    JSON转换为JS对象
var str = '{"a": "Hello", "b": "world"}'
var obj = JSON.parse(str) // {a:"Hello",b:"world"}
5. XMLHttpRequest Level2

1)旧版本存在问题

2)新版本新加功能

// 设置超时时间
    xhr.timeout = 30
// 设置超时事件处理函数
    xhr.ontimeout = function () {
      console.log('请求超时了!')
    }
// 1. 通过DOM操作,获取到form表单元素
    var form = document.querySelector('#form1')
// 2. 创建FormData实例获取form表单数据
    var fd = new FormData(form) // {name: 'pp', pwd: 123}
// 与Jqueryserialize()区分    
// var data = $('#form1').serialize() // name=pp&amp;pwd=123
// 3. 使用FormData对象提交POST方法的数据
    var xhr = new XMLHttpRequest()
    xhr.open('POST', 'http://www.liulongbin.top:3006/api/formdata')
    xhr.send(fd)
    ...

// 不涉及表单时 可以调用append函数,向fd中追加数据
    fd.append('name', 'pp')
    fd.append('pwd', '123')
// 1)定义UI结构【省略
// 2)验证是否选择文件
var files = document.querySelector('#file1').files
      if (files.length <= 0) {
        return alert('请选择上传文件!')
      }
// 3)向FormData追加文件file接口定义的数据名称
var fd = new FormData()
fd.append('file', files[0])
// 4)XHR上传文件【POST方法省略】
// 监听文件上传的进度
xhr.upload.onprogress = function (e) {
    if (e.lengthComputable) {
    	// 计算出上传的进度:e.loaded传输字节/e.total传输字节
       	var Complete = Math.ceil((e.loaded / e.total) * 100)
        // 动态设置bootstrap进度条
        $('#percent').attr('style', 'width: '+Complete+'%;').html(Complete+'%')
    }
}
// 上传成功后改变进度条样式
xhr.upload.onload = function () {
    $('#percent').removeClass().addClass('progress-bar progress-bar-success')
}

// 使用jquery实现文件上传时
// 上传文件【只能用ajax
$.ajax({
    method: 'POST',
    url: 'http://www.liulongbin.top:3006/api/upload/avatar',
    // 传入FromData数据
    data: fd,
    // 不编码,使用FormData默认的content-Type
    processData: false,
    contentType: false,
    success: function (res) {
       console.log(res)
    }
})
// 监听到Ajax请求被发起
      $(document).ajaxStart(function () {
        $('#loading').show() // #loading一张图片
      })
// 监听到Ajax完成
      $(document).ajaxStop(function () {
        $('#loading').hide()
      })

七、网络数据请求Axios

1. Axios

专注于网路数据请求的JS库axios.js
相比于原生的XMLHttpRequest对象更简单易用;相比于jQuery轻量化

2. Axios发起get请求
// axios.get(‘url’, { params: paramsObj }).then(callback)
var url = 'http://www.liulongbin.top:3006/api/get'
var paramsObj = { name: 'zs', age: 20 }
axios.get(url, { params: paramsObj }).then(function (res) {
// res.data为服务器返回的数据
    console.log(res.data)
})
3. Axios发起post请求
// axios.post(‘url’, paramsObj).then(callback)
var url = 'http://www.liulongbin.top:3006/api/post'
var dataObj = { address: '北京', location: '顺义区' }
axios.post(url, dataObj).then(function (res) {
// res.data为服务器返回的数据
     console.log(res.data)
})
4. Axios发起axios请求
// GET 参数对象写入params
axios({
    method: 'GET',
    url: 'http://www.liulongbin.top:3006/api/get',
    params: { name: '钢铁侠', age: 35 }
}).then(function (res) {
    console.log(res.data)
})
// POST 参数对象写入data
axios({
    method: 'POST',
    url: 'http://www.liulongbin.top:3006/api/post',
    data: { name: '娃哈哈', age: 18, gender: '女' }
}).then(function (res) {
    console.log(res.data)
})

八、跨域请求JSONP

1. 同源跨域
2. 跨域请求解决方案
3. JSONP用法

1)JSONP原理
<script>标签不会受到浏览器同源策略影响,可以通过<script>标签src属性请求跨域的数据接口,并通过函数调用的方式接收响应回来的数据。

2)JSONP请求步骤

<script>
// 通过自定义函数abc接收响应数据【与src查询字符串的callback=abc保持一致】
function abc(data) {
   console.log('JSONP响应回来的数据是:')
   console.log(data)
}
</script>

<script src="http://ajax.frontend.itheima.net:3006/api/jsonp?callback=abc&amp;name=ls&amp;age=30"></script>

3)jQuery发起JSONP请求
jQuery采用在<header>标签中,动态创建、移除<script>标签的方式,来发起JSONP数据请求。

$.ajax({
    url: 'http://ajax.frontend.itheima.net:3006/api/jsonp?name=zs&age=20',
    // 发起JSONP的数据请求,必须指定dataType为jsonp
    dataType: 'jsonp',
    // 指定参数名称【一般不用,默认为callback
    // jsonp: 'callback',
    // 指定回调函数名称【不指定时默认携带callback=jQueryxxx随机生成回调函数名称
    jsonpCallback: 'abc',
    success: function (res) {
          console.log(res)
    }
})

原文地址:https://blog.csdn.net/sillyxue/article/details/123664459

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46388.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注