获取Ajax中回调函数中的数据--Ajax的同步和异步

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flower_CSDN/article/details/81559637

刚开始是这样写的,alert(data)的结果是正确的,但是页面显示出来出来一直是undefined

function findBookTypeById(id){
    $.ajax({
        type : "post",
        url : "selectNameById",
        data : {
            bookid: id
        },
        dataType : "text",
        success : function(data){
             alert(data);
            return data;
        });
}

后来加上了全局变量然后在回调函数中把data的值赋给全局变量,但还是显示undefined.
后来在网上搜获取回调函数中数据的方法终于找到答案了。
最终的正确写法:

function findBookTypeById(id){
    var typename="";
    $.ajax({
        async:false,
        type : "post",
        url : "selectNameById",
        data : {
            bookid: id
        },
        dataType : "text",
        success : function(data){
            typename=data;
            }
        });
    return typename;
}

需要将Ajax的请求改为同步的,async=false;
因为默认ajax是异步执行的,也就是Ajax中的代码和Ajax外面的代码块是同时执行的,并没有按照顺序执行,所以typename就没有被赋值,var typename; typename显示的就是Undefined。将Ajax方法改为同步的,就可以等Ajax块执行完毕再执行后面的代码了,即顺序执行。
关于Ajax的同步和异步:
同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现假死状态,当这个AJAX执 行完毕后才会继续运行其他代码页面假死状态解除。 所以如果用的太多,页面假死次数太多。可能而导致用户体验不佳。
而异步则这个AJAX代码运行中的时候其他代码一样可以运行。
Ajax的async默认设置为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success(回调函数),也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程),所以连个线程是同时进行的,在Ajax中的赋值就失效了。将Ajax的aync修改为false变为同步后,就可以等Ajax中的代码执行完毕之后再去执行Ajax外面的代码块。
同步异步这块参考了: https://www.cnblogs.com/sdya/p/4624578.html更详细的可以去看这篇文章。

猜你喜欢

转载自blog.csdn.net/flower_CSDN/article/details/81559637