通过async参数获取jQuery中Ajax函数的返回值

南笙酒味 提交于 2019-12-06 23:48:41

先描述一下这个函数使用的环境, 网站后台做一个在线访客列表功能,列出每一个用户实时访问的信息(包含当前访问的商品,类目,所在的控制器 url .... ) 扯远了, 这个跟jquery这个没关系

为了节省服务器资源, 商品信息采取异步获取, 服务器中只记录了访客访问的商品ID. 后台列表页中的jquery获取商品函数如下:

function getGoodsInfo(goods_id){
        var goods_info = "";
        if(goods_id == ""){
            return false;
        }
        var rule = /^\d+$/i;
        var url = "/Admin/Goods/ajaxInfo";
        if (rule.test(goods_id)) {
            $.ajax({
                type:"GET",
                dataType:"json",
                cache:true,
                url:url,
                data:"gid=" + goods_id,
                success:function (data) {
                    if (data.status == true) {
                        goods_info = "<dl>" +
                                "       <dt><a href=\"" + data.data.url + "\" target=\"_blank\"><img src=\"" + data.data.gallery + "\"></a> </dt>......</dl>";
                    } else {
                        return false;
                    }
                }
            });
        }
        return goods_info;
    }

这段代码无法返回ajax函数获取的动态变量

goods_info 一直是空的.


改进了一下,通过下了个全局变量,将async(默认为true)异步改成同步,就顺利得到了ajax的返回值。代码如下:


function getGoodsInfo(goods_id){
        var goods_info = "";
        if(goods_id == ""){
            return false;
        }
        var rule = /^\d+$/i;
        var url = "/Admin/Goods/ajaxInfo";
        if (rule.test(goods_id)) {
            $.ajax({
                type:"GET",
                dataType:"json",
                cache:true,
                async: false,
                url:url,
                data:"gid=" + goods_id,
                success:function (data) {
                    if (data.status == true) {
                        goods_info = "<dl>" +
                                "       <dt><a href=\"" + data.data.url + "\" target=\"_blank\"><img src=\"" + data.data.gallery + "\"></a> </dt>" +
                                "  ..... ...</dl>";


                    } else {
                        return false;
                    }
                }
            });
        }
        return goods_info;
    }



async是asynchronous[异步]的缩写,它是一个bool值默认为true。当async为true时,先不管ajax请求是否完成都要向下执行。同步请求要临时锁定浏览器,当请求正在执行时不执行任何动作。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!