前端js接入后台接口数据的一点简单总结
在前端接入后端接口数据时,刚开始入门的小白,基本都是都是使用如下结构来接入:
function m1(){
$.ajax({
type: post,
url: basePath+"/interface/get?outsys=roma&name=asdf",
data:{
params:{}
},
success: function(result) {
console.log(result);
eval(initChart_ + name + (result));
}
});
}
以上我把它称为散装的js方法,这样如果有多个有多个接口需要对接,就会有多个这种散装function();
升级改造后如下,拿一个项目来举例:
/**
* 事项列表
*/
var sxml_list = function(){
/**
* 接口集
* 包含每个图表,的测试地址和正式地址
*/
var apiArray = {
"0":{"url":"getEventList","params":{},"testUrl":"","desc":"根据条件筛选事项列表"},
"1":{"url":"getEventDetailByConfidition","params":{},"testUrl":"","desc":"根据条件筛选事项详情"},
"2":{"url":"oneEventHasManyDuty","params":{"name":""},"testUrl":"","desc":"一事多责"}
}
var initChart_0 = function(result){
console.log(result);
var data = result.retJSON.result.retJSON.result;
$(#row_count).text(data.length);
$("#list").empty();
if(data.length>0){
let htmlstr = ;
$.each(data,function(i,n){
htmlstr += <tr class="tr" eventId=+data[i].事项id+ >;
htmlstr += <td>+(i+1)+</td>;
htmlstr += <td>+data[i].事项名称++(data[i].事项简述==null?:--+data[i].事项简述)+</td>;
htmlstr += </tr>;
$("#list").html(htmlstr);
});
//将拼接好的字符串追加到tbody中
$(.tr).bind(click,function(){
sxml_list.apiArray[1].params.eventId = $(this).attr(eventId);
setTimeout(function(){
sxml_list.init(1,true);
},300);
if($(this).hasClass(heighlight)){
$(this).removeClass(heighlight);
return;
}
$(.tr).removeClass(heighlight);
$(this).addClass(heighlight);
})
}
}
var initChart_1 = function(result){
var data = result.retJSON.result;
$("#sxmc").html(data[0].事项名称++(data[0].事项简述==null?:--+data[0].事项简述));
// $("#sxbm").html(data[0].事项编码)
// $("#sxjs").html(data[0].事项简述)
$("#glzr").html(data[0].部门名称)
$("#glzt").html(data[0].部门名称)
$("#glyj").html(data[0].管理依据==null?--:data[0].管理依据)
$("#ysdz").html(data[0].是否一事多责==null?"处理流程":"一事多责");
data[0].是否一事多责==null?(show0()):(show())
$("#sxlx").html(data[0].事项名称)
$(".one-item").html("");
//展示流程
function show0(){
$(.right .body .process).show();
$(".one-n").hide();
$("#czls").html(data[0].部门名称)
// $("#glzt").html(data[0].部门名称)
}
//展示一事多责
function show(){
$(.right .body .process).hide();
$(".one-n").show();
sxml_list.apiArray[2].deptName = data[0].部门名称+data[0].事项简述;
sxml_list.apiArray[2].params.name = data[0].事项名称;
sxml_list.init(2,true);
}
}
var initChart_2 = function(result){
var data = result.retJSON.result;
var oneData = [];
if(data.length>0){
for(var i in data){
oneData.push({
name:data[i].resume,
bm:data[i].deptname
})
}
}
one_item_load(oneData);
}
//****获取数据接口***
var getAjaxSources = function(name,dataType){
if(dataType){
return basePath+"/interface/get?outsys=roma&name="+apiArray[name].url;
}else{
return basePath+apiArray[name].testUrl;
}
}
var init = function(name,dataType){
try {
/*统一访问*/
var ajaxSources = getAjaxSources(name,dataType);
$.ajax({
type: post,
url: ajaxSources,
data:{
params:JSON.stringify(apiArray[name].params)
},
success: function(result) {
console.log(result);
eval(initChart_ + name + (result));
}
});
} catch(e) {}
}
return{
init:init,
apiArray:apiArray
}
}();
这样把接口,变量,以及获取后端的ajax都拆分开来统一放到一个对象里面来管理,代码结构清晰明朗,复用性也比较高。
以上仅为工作中的小小总结。
有更好的代码结构及优化建议的朋友欢迎留言。
