使用$.getJSON对外部变量进行赋值时的问题
淘淘项目中商品信息和商品类目分别采用tb_item
和tb_item_cat
两张表进行保存,而在Service层
进行查询时采用的是单表查询,只能查询出商品类目的ID,在EasyUI
的表单中显示效果就有些不直观。查看数据库表tb_item
的结构,其中的status
的类型为tinyint
,但是表单中的形式却表现为字符串。
查看了页面代码,发现状态一栏调用了js方法将查出来的数据进行了转换,而商品类目直接采用了查出来的数据。
于是照猫画虎,将商品类目一栏也进行相应的修改,并在common.js
中增加了相应的函数。
// item-list.jsp在页面jsp中为该行数据增加了处理函数
<th data-options="field:'cid',width:100,align:'center',formatter:TAOTAO.formatItemCategory">商品类目</th>
// common.js中增加了处理函数,用来格式化商品类别
formatItemCategory : function formatCategory(val,row){
var catData = "";
$.getJSON("/item/cat/" + val,function(data){
if(data.status == 200){
catData = data.data
}
});
return catData;
},
本来以为这样就可以了,但实际效果却不尽人意,表单中商品类目一栏反而显示为空白了。
在百度上查询了一番,原来是因为ajax
默认请求是异步处理,在getJSON
还没有执行完的情况下,下面的return catData;
就执行了,导致页面得到的数据为空。
所以需要将请求改为同步执行,在执行getJSON
方法之前,加上$.ajaxSetup({async:false});
即可。
formatItemCategory : function formatCategory(val,row){
var catData = "";
$.ajaxSetup({async:false}); // 将请求改为同步处理
$.getJSON("/item/cat/" + val,function(data){
if(data.status == 200){
catData = data.data
}
});
return catData;
},
修改完成后,再次刷新页面的时候就可以看到正确的数据。