在jquery的ajax
中如果我们希望实现同步或者异步时我们可以直接设置async
属性为false
和true
当把async
设为false
时,这时ajax
的请求时同步的
也就是说,这个时候ajax块发出请求后,他会等待在load()
这个地方,不会去执行after()
直到load()
部分执行完毕。
<script src="//cdn.bootcss.com/jquery/2.1.3/jquery.min.js"></script>
<script>
function load(msg) {
console.log(msg);
}
function after(){
console.log('after');
}
$.ajax({
url: '/ajax',
method: 'GET',
async: false
}).success(function(result){
load(result);
});
after();
</script>
var http = require('http');
var fs = require('fs');
http.createServer(function(req,res){
if(req.url == '/sync'){
fs.createReadStream('sync.html').pipe(res);
}else if(req.url == '/ajax'){
setTimeout(function(){
res.end('ok');
},5000);
}else{
res.end('Not Found');
}
}).listen(8080);
在这里,async
默认的设置值为true
,这种情况为异步方式
就是说当ajax
发送请求后,在等待server端返回的这个过程中,前台会继续执行ajax
块后面的脚本,直到server
端返回正确的结果才会去执行success
也就是说这时候执行的是两个线程,ajax
块发出请求后一个线程和ajax
块后面的脚本(另一个线程)
var http = require('http');
var fs = require('fs');
http.createServer(function(req,res){
if(req.url == '/sync'){
fs.createReadStream('sync.html').pipe(res);
}else if(req.url == '/async'){
fs.createReadStream('async.html').pipe(res);
} else if(req.url == '/ajax'){
setTimeout(function(){
res.end('ok');
},5000);
}else{
res.end('Not Found');
}
}).listen(8080);
<script src="//cdn.bootcss.com/jquery/2.1.3/jquery.min.js"></script>
<script>
function load(msg) {
console.log(msg);
}
function after(){
console.log('after');
}
$.ajax({
url: '/ajax',
method: 'GET',
async: true
}).success(function(result){
load(result);
});
after();
</script>