先描述一下這個函數使用的環境, 網站後臺作一個在線訪客列表功能,列出每個用戶實時訪問的信息(包含當前訪問的商品,類目,所在的控制器 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請求是否完成都要向下執行。同步請求要臨時鎖定瀏覽器,當請求正在執行時不執行任何動做。 異步