About ajax secondary encapsulation jquery

小云云
Release: 2023-03-18 13:28:01
Original
1633 people have browsed it

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(){},
 .......
})
Copy after login

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);
 }
 }
})
Copy after login

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)
 }
 })
}
Copy after login

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)
 })
Copy after login

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)
 })
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template