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