Ajax
发送 ajax 请求的几种方法
- 原生: XMLHttpRequest()
- jQuery: $.ajax({type:’POST’,data:string,success:function(){}})
- fetch: fetch(‘url’).then(res=>res.json()).then(json=>do()).catch(err=>alert(‘err’))
- axios
原生方法
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function () {
console.log(ajax.readyState);
if(ajax.readyState==4 && ajax.status==200){
console.log(typeof ajax.responseText);
let data = JSON.parse(ajax.responseText);
console.log(data);
document.getElementById('name').innerHTML = data.name;
}
}
ajax.open("GET","https://api.github.com/users/fightingljm",true)
ajax.send();
jQuery 方法
<script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
GET
$.ajax({
type:'GET',//默认为 GET ,可省略不写
url:'https://api.github.com/users/fightingljm',
success:function (data,status) {
console.log(data,status);
}
})
POST
$.ajax({
type:'POST',
data:{
accesstoken:'3aae6c64-7539-44d7-8494-ff0acaa36ce1'
},
url:' https://cnodejs.org/api/v1/accesstoken',
success:function (data,status) {
// console.log(data,status);
$('#name').html(data.loginname)
$('#img').append(`<img src="${data.avatar_url}"/>`)
}
})
链式操作
$.ajax({
type:'POST',
data:{
accesstoken:'3aae6c64-7539-44d7-8494-ff0acaa36ce1'
},
url:' https://cnodejs.org/api/v1/accesstoken'
}).done(function (data,status) {
// console.log(data,status);
$('#name').html(data.loginname)
$('#img').append(`<img src="${data.avatar_url}"/>`)
}).fail(function () {
alert('aaa')
})
跨域请求
- 跨域请求 http 协议的规定就是不同源之间不能进行资源共享
- https://api.github.com:80 这一段如果有不同的都叫跨域
- 一般后台设置 Access-Control-Allow-Origin:* 就能解决
$.ajax({
dataType:'jsonp',
jsonp:'callback',
//jsonp 请求只能 GET
url:' https://api.douban.com/v2/book/1220562'
}).done(function (data,status) {
console.log(data,status);
}).fail(function (xhr,error) {
alert(error)
})
Fetch 方法
GET
fetch('https://api.github.com/users/fightingljm',{method:'GET'})
.then(response=>response.json())
.then(json=>console.log(json))
POST
fetch('https://cnodejs.org/api/v1/accesstoken', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
accesstoken:'3aae6c64-7539-44d7-8494-ff0acaa36ce1'
})
})
.then(res=>res.json())
.then(json=>console.log(json))
拓展理解 Promise then
new Promise(function (resolve,reject) {
console.log('Run!');
setTimeout(function () {
reject()
},3000);
}).then(function () {
console.log('thing.then()...');
}).catch(function () {
console.log('thing.catch()...');
})
axios 方法
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
GET
axios.get('https://api.github.com/users/fightingljm')
.then(response=> console.log(response))
.catch(error=> console.log(error))
POST
axios.post('https://cnodejs.org/api/v1/accesstoken',{
accesstoken:'3aae6c64-7539-44d7-8494-ff0acaa36ce1'
})
.then(response=> console.log(response.data))
.catch(error=> console.log(error))
cnodejs
首先装包
$ npm install axios
App.js
import React from 'react';
import axios from 'axios';
import $ from 'jquery';
class App extends React.Component {
constructor() {
super();
this.state={
data:[]
}
}
componentDidMount(){
//1.axios
axios.get('https://cnodejs.org/api/v1/topics?page=1&limit=5')
.then(res => this.setState({data:res.data.data}))
//2.Fetch
fetch('https://cnodejs.org/api/v1/topics')
.then(res => res.json())
.then(json => this.setState({data:json.data}))
//3.原生
var _this=this;
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function () {
if(ajax.readyState==4 && ajax.status==200){
let data = JSON.parse(ajax.responseText);
_this.setState({data:data.data})
}
}
ajax.open("GET","https://cnodejs.org/api/v1/topics",true)
ajax.send();
//4.jQuery
$.ajax({
type:'GET',
url:'https://cnodejs.org/api/v1/topics',
success:data => this.setState({data:data.data})
})
}
render(){
// console.log(this.state.data);
let blog = this.state.data.map(item =>
<div key={item.id}>
<img src={item.author.avatar_url}/>
<a href={`https://cnodejs.org.topics/${item.id}`} target='_blank'>{item.title}</a>
<span>浏览量:{item.visit_count}</span>
</div>
)
return(
<div>
{blog}
</div>
)
}
}
export default App;