先描述一下这个函数使用的环境, 网站后台作一个在线访客列表功能,列出每个用户实时访问的信息(包含当前访问的商品,类目,所在的控制器 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请求是否完成都要向下执行。同步请求要临时锁定浏览器,当请求正在执行时不执行任何动做。 异步