ホームページ >ウェブフロントエンド >フロントエンドQ&A >URLエンコードなしで$.paramメソッドを使用する方法

URLエンコードなしで$.paramメソッドを使用する方法

PHPz
PHPzオリジナル
2023-04-17 14:59:25872ブラウズ

jQuery の Ajax リクエストを使用する場合、データ送信を容易にするために $.param メソッドを使用してオブジェクトをクエリ文字列にシリアル化することがよくあります。 $.param メソッドは、データを自動的に URL エンコードします (たとえば、スペースを .param に変換します)。ただし、場合によっては、URL エンコードを行わずにオブジェクトをシリアル化し、そのまま保持したい場合があります。この記事では、URLエンコードを行わずに$.paramメソッドを使用する方法を紹介します。

まず、$.param メソッドの基本的な使い方を見てみましょう。次のオブジェクトがあるとします。

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

以下に示すように、$.param メソッドを使用してクエリ文字列にシリアル化できます。

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"

ご覧のとおり、$.paramメソッドはオブジェクトをシリアル化します。 URL はエンコードされ、スペースは に変換され、一部の特殊文字はエンコードされます。オリジナルの外観を維持したい場合は、ちょっとしたトリックを使用する必要があります。

まず、次のように、URL エンコードを実行しない関数を定義する必要があります。

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

この関数の機能は、オブジェクトを文字列に変換することであり、URL は実行されません。エンコーディング。次に、この関数を使用して、以下に示すように、オブジェクトをクエリ文字列にシリアル化できます。

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"

ご覧のとおり、このメソッドによって生成されたクエリ文字列は URL エンコードされていませんが、スペースは置き換えられます。プラスになりました。したがって、データを受信するサーバーがこの送信方法をサポートしている場合は、この方法を使用できます。

要約すると、カスタム関数を使用すると、特別なニーズを満たすために、URL エンコードを行わずに jQuery でオブジェクトをシリアル化できます。

以上がURLエンコードなしで$.paramメソッドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。