代码结构:
console.log("1");
$.ajax({
async:false,
url:"url",
dataType:"jsonp",
data:{},
success:function(data){
console.log("2");
}
})
console.log("3");
执行的结果是1 3 2,怎么回事啊,已经设置async是false了,,我想要执行的结果是1 2 3,别说把3的执行放到success函数里,那样直接异步加载也可以。
jsonp是都是异步的,因为用的script加载,设置async没用,要使用返回值只能回调里面执行相关js代码
使用ajax方式向后台发起请求,请求成功后在success收到回调,因为向后台执行请求后台会有相应的相应时间,所以3会比2提前输出。
为什么3会在2之前?
那是因为你再调用ajax的时候程序只负责让ajax去执行请求,并不是告知程序等待success成功后在继续调用下面的内容
所以你在执行了ajax的时候只是相当于向后台发起了请求,程序还会继续向下运行
Jquery的API,说的就是说JSONP格式,不支持跨域同步的,你试一下json格式,是可以同步的
在跨域的情况下,ajax 同步失效
ajax是不能跨域的
jsonp的实现不是ajax,而是script节点,所以对ajax有效的配置未必对jsonp有效