經過async參數獲取jQuery中Ajax函數的返回值

先描述一下這個函數使用的環境, 網站後臺作一個在線訪客列表功能,列出每個用戶實時訪問的信息(包含當前訪問的商品,類目,所在的控制器 url .... ) 扯遠了, 這個跟jquery這個不要緊 jquery

爲了節省服務器資源, 商品信息採起異步獲取, 服務器中只記錄了訪客訪問的商品ID. 後臺列表頁中的jquery獲取商品函數以下: 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,
                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函數獲取的動態變量 json

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請求是否完成都要向下執行。同步請求要臨時鎖定瀏覽器,當請求正在執行時不執行任何動做。 異步

相關文章
相關標籤/搜索