Everyone knows that the full name of secondary encapsulation of jquery and Ajax is Asynchronous JavaScript and XML. The following article mainly introduces you to examples of secondary encapsulation of jquery ajax. The article introduces it through sample code. For details, friends who need it can take a look below. I hope it can help everyone.
The technologies involved in AJax:
1. Use CSS and XHTML to express.
2. Use DOM model for interaction and dynamic display.
3. Use XMLHttpRequest to communicate asynchronously with the server. (Core)
4. Use javascript to bind and call.
When our front-end processes data, it is inevitable to communicate with ajax and the background. Ajax communicates with the server through the XMLHttpRequest object. jquery encapsulates the $.ajax method based on XMLHttpReaquest for communication. The $.ajax method It is very practical and very simple to use. This second encapsulation of query ajax, refer to express to add middleware to process data, return Promise (Defferd) objects, reduce callbacks, and write ajax more concisely and elegantly.
$.ajax({ url: url, data: data, dataType: 'json', type: 'get', success: new Function(){}, error: new Function(){}, ....... })
Most of the time we only need to pass in the url and data to get the data we want.
Pain Points
But when using $.ajax in a project, it still has some pain points
It is the data returned by ajax for basically all projects now It has also been encapsulated twice and added information about the background processing business logic.
From returning data, it becomes {code: 200, data:{}, err_msg:''}
If every ajax request comes back, it must be judged whether the code is correct. The entire project is too redundant to process business logic or report errors.
$.ajax({ url: url, data: data, success: function(data){ if(data.code == 200) { dosomething() } else { alert(data.err_msg); } } })
In order to solve this problem, we use a function to encapsulate $.ajax again, and then process the business logic after judging whether it is correct or not. Or the error reminder can be extracted and made into a public part.
util.ajax = function(obj, successFn){ $.ajax({ url: obj.url || '/interface', data: obj.data || {}, dataType: obj.dataType || 'json', type: obj.type || 'get', success: function(data){ if (data.code != 200) { alert(data.err_msg); } else { successFn(data.data) } }, error: function(err){ alert(err) } }) }
promise
Use util.ajax instead of $.ajax to reduce business errors. Let's improve it again, instead of using callbacks, use promises to call, reducing callbacks and making the code clearer.
util.ajax = function(obj) { var deferred = $.Deferred(); $.ajax({ url: obj.url || '/interface', data: obj.data || {}, dataType: obj.dataType || 'json', type: obj.type || 'get', }).success(function (data) { if (data.code != 200) { deferred.reject(data.err_msg); } else { deferred.resolve(data.data) } }).error(function (err) { deferred.reject('接口出错,请重试'); }) return deferred.fail(function (err) { alert(err) }); } // 调用 var obj = { url: '/interface', data: { interface_name: 'name', interface_params: JSON.stringify({}) } }; util.ajax(obj) .done(function(data){ dosomething(data) })
Middleware
This is a public method, but sometimes we need to deal with differentiation. We refer to express to introduce a middleware to solve the differentiation problem.
util.ajax = function(obj, middleware) { var deferred = $.Deferred(); $.ajax({ url: obj.url || '/interface', data: obj.data || {}, dataType: obj.dataType || 'json', type: obj.type || 'get', }).success(function (data) { if (data.code != 200) { deferred.reject(data.err_msg); } else { deferred.resolve(data.data) } }).error(function (err) { deferred.reject('接口出错,请重试'); }) // 添加中间件 if(!middleware) { middleware = function(){}; } return deferred.done(middleware).fail(function (err) { message({ content: err, type: 'error', showLeftIcon: true, duration: 5000 }); }); } // 调用 // 调用 var obj = { url: '/interface', data: { interface_name: 'name', interface_params: JSON.stringify({}) } }; var middleware = function(data) { data.forEach(function(item){ item.fullName = item.firstName + item.lastName }) } util.ajax(obj, middleware) .done(function(data){ console.log(data.fullName) })
Related recommendations:
Minimalist method to complete JavaScript encapsulation and inheritance
JavaScript simulation three ways to achieve encapsulation and differences Introducing
#php example of encapsulating a single file and uploading it to the database
The above is the detailed content of About ajax secondary encapsulation jquery. For more information, please follow other related articles on the PHP Chinese website!