前言:通常情况下,在不使用angularJS/nodeJS/react等这类完整性的解决方案的js时,前端与后台的异步交互都是使用Ajax技术进行解决

一:作为java web开发工程师可能以下代码是刚开始的阶段最普遍的写法

 $.ajax({
cache: false,
type: 'GET',
url: this.rootUrl + '?' + $.param(param),
dataType: "json",
success: function(data){ },
error: function(){ }
});

如果业务系统稍微复杂,CRUD比较多的看情况下,项目中会出现过多的类似代码,维护起来相当麻烦,样板式的代码过多,不利于代码的可读性。

二:对于这种后台异步交互的访问代码,我们可以通过对业务数据访问的代码封装来进行。

function Service(url) {
this.rootUrl = url; this.errorHandler = function (jqXHR) {
var response = jqXHR.responseJSON;
if (response != null) {
if (!response.success && response.errCode === MSG_SERVER_RESPONSE_NO_USER) {
$(".close").click();
window.location.href = "index.html";
} else {
if (response.msg != null) {
Dialog.showMsg("错误代码:" + response.errCode + ",信息:" + response.msg); } else {
Dialog.showAlert("错误代码:" + response.errCode + ",信息:服务器异常");
}
}
} else {
Dialog.showAlert("服务器异常");
}
}; }
Service.prototype = { constructor: Service,
//find
getAll: function (param, callback) {
$.ajax({
cache: false,
type: 'GET',
url: this.rootUrl + '?' + $.param(param),
dataType: "json",
success: callback,
error: this.errorHandler
});
}, //find
getAllAsync: function (param, callback) {
$.ajax({
cache: false,
type: 'GET',
url: this.rootUrl + '?' + $.param(param),
dataType: "json",
success: callback,
async: false,
error: this.errorHandler
});
}, //find data by id
getById: function (id, data, callback) {
if (typeof data === "function") {
callback = data;
data = null;
}
$.ajax({
cache: false,
type: 'GET',
url: this.rootUrl + '/' + id,
data: data,
dataType: "json",
success: callback,
error: this.errorHandler
});
}
};

  这样封装以后,我们就可以通过对象的方式来获取后端业务数据。这也是前端面向对象的处理方式。例如:

    var entService = new Service("../service/ba/enterprise");
var userData = {
"id": currentEnt.id
};
var successCallback = function (data) {
resoleEntViewAll(data.data);
};
var errorCallBack = function () {
return null;
};
entService.getById(userData.id, userData, successCallback);

  首先,通过new 一个自定义的Service,请求参数与正确返回的函数、错误返回的函数通过参数传递,在此处,我的所有错误处理方法都是调用同一个通用的错误处理函数。正确返回的回调函数,由于业务不同,在调用时分别指定,此处我的错误处理回调函数中使用了BootstrapDialog插件封装的自定义的错误弹框Dialog对象来进行前段错误提示。

最新文章

  1. 【转】linux内核中writesb(), writesw(), writesl() 宏函数
  2. Python中setuptools做什么用的?
  3. 依赖注入 – ASP.NET MVC 4 系列
  4. nginx文件目录权限设置
  5. dp核心问题研究-从入门到放弃
  6. POJ 3268 Silver Cow Party (双向dijkstra)
  7. 在Windows程序中启用console输出-2016.01.04
  8. centos yum 安装问题
  9. ***iOS开发中@selector的理解与应用
  10. 封装的多功能多效果的RecyclerView
  11. 从源码角度深入理解Toast
  12. CentOS安装+配置+远程
  13. 03-OC实例方法、内存管理
  14. 关于ABP——领域服务的思考
  15. [Python] 文科生零基础学编程系列三——数据运算符的基本类别
  16. GlusterFS最佳实践
  17. java json 转换
  18. 【bzoj4031】[HEOI2015]小Z的房间
  19. 洛谷 P1121 环状最大两段子段和 解题报告
  20. MySQL 环境搭建之解压方式安装

热门文章

  1. 以太坊系列之十三: evm指令集
  2. Kotlin 在kotlin内使用Java的一些注意(长篇)
  3. Delphi XE8中开发DataSnap程序常见问题和解决方法 (三)用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”
  4. hive默认分隔符
  5. servlet 核心技术
  6. [agc008f] Black Radius 树形dp
  7. github上传Python被识别为css--解决
  8. Liunux疑问
  9. python基础语法之基础语法规则以及设置
  10. HDU_1028 Ignatius and the Princess III 【母函数的应用之整数拆分】