Maison  >  Article  >  interface Web  >  Comment utiliser la méthode $.param sans encodage d'URL

Comment utiliser la méthode $.param sans encodage d'URL

PHPz
PHPzoriginal
2023-04-17 14:59:25826parcourir

Lorsque nous utilisons la requête Ajax de jQuery, nous utilisons souvent la méthode $.param pour sérialiser un objet dans une chaîne de requête afin de faciliter la transmission de données. La méthode $.param encode automatiquement les données en URL, par exemple en convertissant les espaces en %20. Cependant, nous souhaitons parfois sérialiser l'objet sans encodage URL et le conserver tel quel. Cet article explique comment utiliser la méthode $.param sans encodage d'URL.

Tout d’abord, examinons l’utilisation de base de la méthode $.param. Supposons que nous ayons l'objet suivant :

var data = {
  name: 'John Doe',
  age: 30,
  company: 'ABC Inc.',
  address: {
    street: '123 Main St',
    city: 'Anytown',
    state: 'CA',
    zip: '12345'
  }
};

Nous pouvons utiliser la méthode $.param pour le sérialiser dans une chaîne de requête, comme indiqué ci-dessous :

var queryString = $.param(data);

// queryString 的值为:
// "name=John%20Doe&age=30&company=ABC%20Inc.&address%5Bstreet%5D=123%20Main%20St&address%5Bcity%5D=Anytown&address%5Bstate%5D=CA&address%5Bzip%5D=12345"

Comme vous pouvez le voir, la méthode $.param encode l'URL de l'objet et le convertit. espaces à %20, certains caractères spéciaux sont codés. Si nous voulons conserver l’aspect original, nous devons utiliser une petite astuce.

Tout d'abord, nous devons définir une fonction qui n'effectue pas d'encodage d'URL, comme suit :

function serializeParam(obj) {
  var str = [];
  for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
      str.push(encodeURIComponent(p) + '=' + obj[p]);
    }
  }
  return str.join('&');
}

La fonction de cette fonction est de convertir l'objet en une chaîne, qui n'effectue pas d'encodage d'URL. Ensuite, nous pouvons utiliser cette fonction pour sérialiser l'objet dans une chaîne de requête, comme indiqué ci-dessous :

var queryString = Object.keys(data).map(function(key) {
  var value = data[key];
  if (typeof value === 'object') {
    value = serializeParam(value).replace(/%20/g, '+');
  }
  return encodeURIComponent(key) + '=' + value;
}).join('&');

// queryString 的值为:
// "name=John Doe&age=30&company=ABC Inc.&address[street]=123 Main St&address[city]=Anytown&address[state]=CA&address[zip]=12345"

Comme vous pouvez le voir, la chaîne de requête générée par cette méthode n'est pas codée en URL, mais remplace les espaces par des signes plus. Par conséquent, si le serveur recevant les données peut prendre en charge cette méthode de transmission, nous pouvons utiliser cette méthode.

En résumé, nous pouvons sérialiser des objets dans jQuery sans encodage d'URL en utilisant une fonction personnalisée adaptée à nos besoins particuliers.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn