JavaScript / jQueryの$ .param()逆関数


122

次のフォームがあるとします:

<form>
    <input name="foo" value="bar">
    <input name="hello" value="hello world">
</form>

$.param( .. )構造を使用してフォームをシリアル化できます。

$.param( $('form input') )

=> foo=bar&hello=hello+world

上記の文字列をJavaScriptで逆シリアル化してハッシュを取得するにはどうすればよいですか?

例えば、

$.magicFunction("foo=bar&hello=hello+world")

=> {'foo' : 'bar', 'hello' : 'hello world'}

リファレンス:jQuery.param( obj )


2
ねえ、私はこのコメントを追加しているだけなので、コードを使用している場合に備えて、コードに対して行った更新を確認できます+。今ではそれらすべてを置き換えます!
Blixt 2009

というプラグインがありますQueryString。作成しましたが、パラメータを受け入れず、window.location.searchからのみ読み取ります。パラメータを受け入れる他の人を覚えています...
BrunoLM 2010

1
依存関係なしのNPMモジュールとしてjquery BBQ deparam()メソッドをリファクタリングnpmjs.com/package/deparam
alexey2baranov

alexey2baranov依存関係としてNPMなしでdeparam()をリファクタリングするのはどうですか?:)
Andrew

回答:


62

jQuery BBQdeparam関数を使用する必要があります。十分にテストされ、文書化されています。


素敵なプラグイン!共有いただきありがとうございます。
ジョナサン

29
BBQプラグイン全体を取得したくない場合は、deparam関数がスタンドアロンプ​​ラグインとしてここに抽出されています:github.com/chrissrogers/jquery-deparam
Felipe Castro

2
残念ながら、githubページは何年も更新されていません。私が試したところ、最新のjQueryとの互換性がないようです...必要なもののように見えます。
pilavdzice 2013年

31

これは、少し前に書いた関数を少し変更したもので、同じようなことをします。

var QueryStringToHash = function QueryStringToHash  (query) {
  var query_string = {};
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    pair[0] = decodeURIComponent(pair[0]);
    pair[1] = decodeURIComponent(pair[1]);
        // If first entry with this name
    if (typeof query_string[pair[0]] === "undefined") {
      query_string[pair[0]] = pair[1];
        // If second entry with this name
    } else if (typeof query_string[pair[0]] === "string") {
      var arr = [ query_string[pair[0]], pair[1] ];
      query_string[pair[0]] = arr;
        // If third or later entry with this name
    } else {
      query_string[pair[0]].push(pair[1]);
    }
  } 
  return query_string;
};

1
正確に私が受け入れた答えで「これは配列では機能しません」と思ったこと。あなたのソリューションは大丈夫です。
Robert Koritnik 2009

20

この短い機能的アプローチはどうですか?

function parseParams(str) {
    return str.split('&').reduce(function (params, param) {
        var paramSplit = param.split('=').map(function (value) {
            return decodeURIComponent(value.replace(/\+/g, ' '));
        });
        params[paramSplit[0]] = paramSplit[1];
        return params;
    }, {});
}

例:

parseParams("this=is&just=an&example") // Object {this: "is", just: "an", example: undefined}

1
これは受け入れられる答えであり、外部の依存関係はありません。
Michael Robinson

シンプルで信頼性の高い強力なソリューション。尊敬します
fmquaglia 2016

5
それが何をするのかは確かに良い解決策です。ただし、渡される配列やオブジェクトは処理されません。URL field[][]=a&field[0][]=b&field[0][]=cは本来あるObject { field[][]: "a", field[0][]: "c" }べき場所として処理されますresultobject.field[0] = Array [ "a", "b", "c" ]。これは、PHPから予想される動作です。@JackyLiのソリューションはそれを処理します。
cars10m 2016

16

私の答え:

function(query){
  var setValue = function(root, path, value){
    if(path.length > 1){
      var dir = path.shift();
      if( typeof root[dir] == 'undefined' ){
        root[dir] = path[0] == '' ? [] : {};
      }

      arguments.callee(root[dir], path, value);
    }else{
      if( root instanceof Array ){
        root.push(value);
      }else{
        root[path] = value;
      }
    }
  };
  var nvp = query.split('&');
  var data = {};
  for( var i = 0 ; i < nvp.length ; i++ ){
    var pair = nvp[i].split('=');
    var name = decodeURIComponent(pair[0]);
    var value = decodeURIComponent(pair[1]);

    var path = name.match(/(^[^\[]+)(\[.*\]$)?/);
    var first = path[1];
    if(path[2]){
      //case of 'array[level1]' || 'array[level1][level2]'
      path = path[2].match(/(?=\[(.*)\]$)/)[1].split('][')
    }else{
      //case of 'name'
      path = [];
    }
    path.unshift(first);

    setValue(data, path, value);
  }
  return data;
}

はい!はい!はい!これは、$。ajax呼び出しでJQueryによって送信されているパラメーターを解析するために必要なものです。これは正しくネストされたハッシュを返します。どうもありがとう、ジャッキー・リー!
Pascal Lindelauf、

これまでの最善の解決策-それはかなりうまく動作します!しかし、私が使用するときは、期待していたものではなく、JSON.stringify(geturlargs('fld[2][]=2&fld[][]=3&fld[3][]=4&fld[]=bb&fld[]=cc').fld)取得します(これがPHPが私に与えるものです)。{"2":["2"],"3":["4"],"":"cc"}[null,null,[2],[3,4],"bb","cc"]
cars10m 2016

1
これが正解です。他の回答はすべて無視してください。それらは適切に機能しません
Andrew

1
この回答は、私の特定のユースケースに対応した唯一の回答です(ネストされたキー/値を持つオブジェクトをjQueryの$ .paramに渡しました。これにより、取得時にこれらの値が適切にハイドレートされます)。
18

9

私はDavid Dorwardの答えを使用していますが、それがPHPまたはRuby on Railsのように動作しないことを認識しました。

それで終わる場合1)変数はアレイである[]ような、?choice[]=1&choice[]=12それがない場合、?a=1&a=2

2)複数のパラメータが同じ名前で存在する場合、PHPサーバー(Ruby on Railsは最初のものを保持し、後のものは無視する)のように、後のものは前のものを置き換えます。 ?a=1&b=2&a=3

したがって、Davidのバージョンを変更すると、次のようになります。

function QueryStringToHash(query) {

  if (query == '') return null;

  var hash = {};

  var vars = query.split("&");

  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    var k = decodeURIComponent(pair[0]);
    var v = decodeURIComponent(pair[1]);

    // If it is the first entry with this name
    if (typeof hash[k] === "undefined") {

      if (k.substr(k.length-2) != '[]')  // not end with []. cannot use negative index as IE doesn't understand it
        hash[k] = v;
      else
        hash[k.substr(0, k.length-2)] = [v];

    // If subsequent entry with this name and not array
    } else if (typeof hash[k] === "string") {
      hash[k] = v;  // replace it

    // If subsequent entry with this name and is array
    } else {
      hash[k.substr(0, k.length-2)].push(v);
    }
  } 
  return hash;
};

これはかなり徹底的にテストされています。


URI仕様では、?a = 1&a = 2は配列である必要があります。Ruby on RailsとPHPは実際の仕様に従っていません。
adiktofsugar 2013

配列に追加する行はhash[k.substr(0, k.length-2)] = [v];andhash[k.substr(0, k.length-2)].push(v);
Baptiste Pernet '27

これがnpmで利用できるようになればいいのですが
Erik van Velzen 2017

7

私はこれが古いスレッドであることを知っていますが、それでもまだいくつかの関連性がありますか?

Jacky Liの優れたソリューションに触発されて、配列とオブジェクトの任意の組み合わせを入力として処理できるようにすることを目的として、独自のわずかなバリエーションを試しました。私はPHPがどのようにそれを実行するかを調べ、「類似した」何かを実行しようとしました。これが私のコードです:

function getargs(str){
   var ret={};
   function build(urlnam,urlval,obj){ // extend the return object ...
    var i,k,o=obj, x, rx=/\[([^\]]*)\]/g, idx=[urlnam.replace(rx,'')];
    while (x=rx.exec(urlnam)) idx.push(x[1]); 
    while(true){
     k=idx.shift();
     if(k.trim()=='') {// key is empty: autoincremented index
       if (o.constructor.name=='Array') k=o.length; // for Array
       else if (o===obj ) {k=null}  // for first level property name
       else {k=-1;                                  // for Object
         for(i in o) if (+i>k) k=+i;
         k++;
       }
     }
     if(idx.length) { 
       // set up an array if the next key (idx[0]) appears to be
       // numeric or empty, otherwise set up an object:
       if (o[k]==null || typeof o[k]!='object') o[k]=isNaN(idx[0])?{}:[]; 
       o=o[k]; // move on to the next level
     }
     else { // OK, time to store the urlval in its chosen place ...
       // console.log('key',k,'val',urlval);                 
       o[k]=urlval===""?null:urlval; break; // ... and leave the while loop.
     } 
    }
    return obj;
   }
   // ncnvt: is a flag that governs the conversion of
   // numeric strings into numbers
   var ncnvt=true,i,k,p,v,argarr=[],
       ar=(str||window.location.search.substring(1)).split("&"),
       l=ar.length;
   for (i=0;i<l;i++) {if (ar[i]==="") continue;
     p=ar[i].split("=");k=decodeURIComponent(p[0]);
     v=p[1];v=(v!=null)?decodeURIComponent(v.replace(/\+/g,'%20')):'';
     if (ncnvt && v.trim()>"" && !isNaN(v)) v-=0;
     argarr.push([k,v]);  // array: key-value-pairs of all arguments
   }
   for (i=0,l=argarr.length;i<l;i++) build(argarr[i][0],argarr[i][1],ret);
   return ret;
}

関数がstr-argument なしで呼び出された場合、window.location.search.slice(1)入力と見なさ れます。

いくつかの例:

['a=1&a=2',                               // 1
 'x[y][0][z][]=1',                        // 2
 'hello=[%22world%22]&world=hello',       // 3
 'a=1&a=2&&b&c=3&d=&=e&',                 // 4
 'fld[2][]=2&fld[][]=3&fld[3][]=4&fld[]=bb&fld[]=cc',  // 5
 $.param({a:[[1,2],[3,4],{aa:'one',bb:'two'},[5,6]]}), // 6
 'a[]=hi&a[]=2&a[3][]=7&a[3][]=99&a[]=13',// 7
 'a[x]=hi&a[]=2&a[3][]=7&a[3][]=99&a[]=13'// 8
].map(function(v){return JSON.stringify(getargs(v));}).join('\n')

結果は

{"a":2}                                    // 1
{"x":{"y":[{"z":[1]}]}}                    // 2
{"hello":"[\"world\"]","world":"hello"}    // 3
{"a":2,"b":null,"c":3,"d":null,"null":"e"} // 4 = { a: 2, b: null, c: 3, d: null, null: "e" }
{"fld":[null,null,[2],[3,4],"bb","cc"]}    // 5 
{"a":[[1,2],[3,4],{"aa":"one","bb":"two"},[5,6]]}  // 6
{"a":["hi",2,null,[7,99],13]}              // 7
{"a":{"0":2,"3":[7,99],"4":13,"x":"hi"}}   // 8

一方、Jacky Liのソリューションは、外部aオブジェクトをプレーンオブジェクトとして生成します

{a:{"0":["1","2"],"1":["3","4"],"2":["5","6"]}} // 6: JackyLi's output

getargs() は、任意のレベルの最初に指定されたインデックスを調べて、このレベルがオブジェクト(非数値インデックス)であるか配列(数値または空)であるかを決定します。これにより、上記のリスト(No. 6)に示すような出力が得られます。

現在のオブジェクトが配列の場合 null空の位置を表すために必要な場所に挿入されます。配列は常に連続番号が付けられ、0ベースです。

例では注意してください。8空のインデックスの「自動インクリメント」は、配列ではなくオブジェクトを処理している場合でも機能します。

私がテストした限りでは、私のgetargs()動作は、受け入れられた回答で言及されているChriss Rogerの優れたjQuery $.deparam() プラグインとほぼ同じように動作します。主な違いは、あるgetargsjQueryをせずに実行し、それがありませんしながら、オブジェクト内のオートインクリメント$.deparam()されますないことを実行します。

JSON.stringify($.deparam('a[x]=hi&a[]=2&a[3][]=7&a[3][]=99&a[]=13').a);

結果は

{"3":["7","99"],"x":"hi","undefined":"13"}

$.deparam()インデックス[]として解釈されるundefined代わりに、オートインクリメント数値インデックス。


この素晴らしい機能をありがとう。ただし、配列のキーとして数値を使用する場合、たとえば '?a [5] [] = x'の場合、オブジェクトの作成時にキーが数値として使用されるため、私の場合は5つの空の要素が作成されます。数値キーを文字列として扱うため、 "5"(引用符付き)をキー、xを値としてオブジェクトを作成します。urlを '?a ["5"] [] = x'にすることもできますが、これは醜い...
Andrew

@Andrew:これは私の側での意図的な設計上の決定でした。私が覚えている限りでは、Jackのソリューションは期待どおりに動作します。o[k]=isNaN(idx[0])?{}:[];新しいオブジェクトに最初に指定された数値インデックスに遭遇するたびに、配列を作成するつもりでこの行を導入しました。それ以外の場合は、汎用オブジェクトを作成します。必要に応じてコードのその部分を変更するのはあなた次第です。I. e。などo[k]={}のトリックを行う必要があります。
cars10m 2017年

ありがとう。PSあなたは間違いなくあなたの関数の途中でconsole.logを削除するべきです;)
Andrew

@Andrew:ありがとう、コメントアウトしました。コードを投稿したときに見落としていたに違いありません。
cars10m 2017

6

新しいjQuery関数を作成する方法は次のとおりです。

jQuery.unparam = function (value) {
    var
    // Object that holds names => values.
    params = {},
    // Get query string pieces (separated by &)
    pieces = value.split('&'),
    // Temporary variables used in loop.
    pair, i, l;

    // Loop through query string pieces and assign params.
    for (i = 0, l = pieces.length; i < l; i++) {
        pair = pieces[i].split('=', 2);
        // Repeated parameters with the same name are overwritten. Parameters
        // with no value get set to boolean true.
        params[decodeURIComponent(pair[0])] = (pair.length == 2 ?
            decodeURIComponent(pair[1].replace(/\+/g, ' ')) : true);
    }

    return params;
};

4
この機能は好きではありません。値のないパラメータが「true」の値を取得する必要があるのはなぜですか?なぜnullではないのですか?この設計上の決定は非常に微妙なバグにつながる可能性があると思います。また、「最後の」値を選択する代わりに、パラメータが複数の値を持つ可能性がある状況を処理しないのはなぜですか?デビッドが投稿したソリューションははるかに優れています。
SolutionYogi

4
これは、あるtrue1がチェックできるように、if (params.redirect)または類似。trueと他の値を区別したい場合は、を使用しますif (params.redirect === true)null値は、私は考えることができることをどのような方法で助けていないでしょう。私がデビッドのようにそれをしなかった理由は、柔軟性よりも一貫性を重視するからです。彼の方法では、値を使用するために値が文字列か配列かを確認する必要があります。私の意見では、これは常に文字列(true'true'は問題ないと思われる値に変換されます)、または常に配列である必要があります。弦を選びました。
Blixt 2009

そのアカウントによって、それがparams.deleteだった場合、それはtrueに設定され、私は何か有害なことをします。ご覧のとおり、例を思いつくのは簡単です。'null'は、値が存在しないことを明確に示しており、呼び出し側がどのように解釈するかは呼び出し側に決定されます。複数の値については、このように見てください。食べ尽くすことで、どちらかの呼び出し元が1つの値しか取得しない理由のデバッグに時間を費やすか、後でコードを変更するようになります。配列を前もって返すことにより、呼び出し元はそれらの処理方法をすぐに知ることができます。情報を破棄することは決して良いことではありません。
SolutionYogi

2
URLがの場合、/abc?deleteのエントリがあると思いますdelete。どう違うのかわかりませんか?この理由で他のコードを優先する方法はわかりません。そのコードは値を'undefined'より良くない文字列に設定するためです。そして、複数の値に関しては、それは単純さ対柔軟性の場合です。クエリ文字列で複数の値が使用されることはほとんどありませんが、必要に応じて、常に1以上の値を持つ配列を返します。戻り値の型を混在させないでください。通常は文字列であったものが突然配列になる可能性があるため、デバッグに時間を費やす必要あります。
Blixt 2009

ありがとう。特効薬はないと思います。私はあなたのコードを取り、少し修正し、ブール値を削除し、配列パラメーターの解析を追加しました。?foo [] = 1&foo [] = 2 => foo:["1"、 "2"]
seb

6

彼のおかげでhttp://james.padolsey.com/javascript/parsing-urls-with-the-dom/

かなり簡単:D

function params_unserialize(p){
var ret = {},
    seg = p.replace(/^\?/,'').split('&'),
    len = seg.length, i = 0, s;
for (;i<len;i++) {
    if (!seg[i]) { continue; }
    s = seg[i].split('=');
    ret[s[0]] = s[1];
}
return ret;}

2
これは、最後に選択されたものだけを保持するため、複数のオプションを持つ選択ボックスでは機能しません。
フェルナンドファブレティ

申し訳ありませんが、コメントであなたが言及している点がわかりません。ここで参照される関数は、paramsを含むURIを?something=1&param2=value2配列にアンシリアライズ/解析することです。「複数のオプションがある選択ボックスを使用しない」とはどういう意味ですか?
brutuscat 2012

4

サーバー側のJScript ASPクラシックページ(デモ)で使用するJavaScript実装は次のとおりです。

// Transforms a query string in the form x[y][0][z][]=1 into {x:{y:[{z:[1]}]}}
function parseJQueryParams(p) {
    var params = {};
    var pairs = p.split('&');
    for (var i=0; i<pairs.length; i++) {
        var pair = pairs[i].split('=');
        var indices = [];
        var name = decodeURIComponent(pair[0]),
            value = decodeURIComponent(pair[1]);

        var name = name.replace(/\[([^\]]*)\]/g, 
            function(k, idx) { indices.push(idx); return ""; });

        indices.unshift(name);
        var o = params;

        for (var j=0; j<indices.length-1; j++) {
            var idx = indices[j];
            var nextIdx = indices[j+1];
            if (!o[idx]) {
                if ((nextIdx == "") || (/^[0-9]+$/.test(nextIdx)))
                    o[idx] = [];
                else
                    o[idx] = {};
            }
            o = o[idx];
        }

        idx = indices[indices.length-1];
        if (idx == "") {
            o.push(value);
        }
        else {
            o[idx] = value;
        }
    }
    return params;
}

これまでのところ、ネストされた配列で見つけた最高のもの
ymakux

3

これを使って :

// convert query string to json object
var queryString = "cat=3&sort=1&page=1";

queryString
    .split("&")
    .forEach((item) => {
        const prop = item.split("=");
        filter[prop[0]] = prop[1];
    });

console.log(queryString);

1

.Net関数のように動作するこのソリューションを思いつきました HttpUtility.ParseQueryString

結果では、クエリ文字列パラメーターは値のリストとしてプロパティに格納qsObj["param"]されるため、呼び出しと同じになりますGetValues("param")、.Netで。

気に入ってくれるといいな。jQueryは必要ありません。

var parseQueryString = function (querystring) {
    var qsObj = new Object();
    if (querystring) {
        var parts = querystring.replace(/\?/, "").split("&");
        var up = function (k, v) {
            var a = qsObj[k];
            if (typeof a == "undefined") {
                qsObj[k] = [v];
            }
            else if (a instanceof Array) {
                a.push(v);
            }
        };
        for (var i in parts) {
            var part = parts[i];
            var kv = part.split('=');
            if (kv.length == 1) {
                var v = decodeURIComponent(kv[0] || "");
                up(null, v);
            }
            else if (kv.length > 1) {
                var k = decodeURIComponent(kv[0] || "");
                var v = decodeURIComponent(kv[1] || "");
                up(k, v);
            }
        }
    }
    return qsObj;
};

使用方法は次のとおりです。

var qsObj = parseQueryString("a=1&a=2&&b&c=3&d=&=e&");

結果をコンソールでプレビューするには、次のように入力します。

JSON.stringify(qsObj)

出力:

"{"a":["1","2"],"null":["","b",""],"c":["3"],"d":[""],"":["e"]}"

1

CSS-TricksNicholas Ortenzioからの元のソース)には、美しいワンライナーがあります:

function getQueryParameters(str) {
    return (str || document.location.search).replace(/(^\?)/,'').split("&").map(function(n){return n = n.split("="),this[n[0]] = n[1],this}.bind({}))[0];
}

本当に賢い部分は、匿名関数のthisオブジェクトを使用して、文字列内の各クエリにキーと値のペアを追加する方法です。とはいえ、まだ改善の余地があります。以下に変更を加え、少し変更しました。

  1. 空の文字列と非文字列入力の処理が追加されました。

  2. 処理されたURIエンコード文字列(%40->@など)。

  3. のデフォルトの使用を削除しました document.location.search入力が空の場合。

  4. 名前を変更し、読みやすくし、コメントを追加しました。

function deparam(str) {
    // Uses an empty 'this' to build up the results internally
    function splitQuery(query) {
        query = query.split('=').map(decodeURIComponent);
        this[query[0]] = query[1];
        return this;
    }

    // Catch bad input
    if (!str || !(typeof str === 'string' || str instanceof String))
        return {};

    // Split the string, run splitQuery on each piece, and return 'this'
    var queries = str.replace(/(^\?)/,'').split('&');
    return queries.map(splitQuery.bind({}))[0];
}

1

これは本当に古い質問ですが、他の人がこの投稿に来る可能性があるので、このテーマを少しリフレッシュしたいと思います。今日、カスタムソリューションを作成する必要はありません-URLSearchParamsインターフェイスがあります。

var paramsString = "q=URLUtils.searchParams&topic=api";
var searchParams = new URLSearchParams(paramsString);

//Iterate the search parameters.
for (let p of searchParams) {
  console.log(p);
}

私が知っている唯一の制限-この機能はIE / Edgeではサポートされていません。


残念ながら、このブラウザをサポートする必要がある場合に備えて、通常どおりIEではサポートしていません。
Lauren

0

これはCoffeescriptの私のバージョンです。のようなURLでも機能します http://localhost:4567/index.html?hello=[%22world%22]&world=hello#/home

getQueryString: (url)->
    return null if typeof url isnt 'string' or url.indexOf("http") is -1

    split = url.split "?"

    return null if split.length < 2 
    path = split[1]

    hash_pos = path.indexOf "#"
    path = path[0...hash_pos] if hash_pos isnt -1

    data = path.split "&"
    ret = {}
    for d in data
      [name, val] = d.split "=" 
      name = decodeURIComponent name
      val = decodeURIComponent val
      try 
        ret[name] = JSON.parse val
      catch error
        ret[name] = val
    return ret

0

GETリクエストからパラメータをすばやく取得するだけの場合は、シンプルでコンパクトなものを次に示します。

function httpGet() {
    var a={},b,i,q=location.search.replace(/^\?/,"").split(/\&/);
    for(i in q) if(q[i]) {b=q[i].split("=");if(b[0]) a[b[0]]=
    decodeURIComponent(b[1]).replace(/\+/g," ");} return a;
}

変換する

something?aa=1&bb=2&cc=3

のようなオブジェクトに

{aa:1,bb:2,cc:3}

0

配列またはオブジェクトのシリアル化された表現を作成します(AJAX要求のURLクエリ文字列として使用できます)。

<button id='param'>GET</button> 
<div id="show"></div>
<script>
  $('#param').click(function () {
    var personObj = new Object();
    personObj.firstname = "vishal"
    personObj.lastname = "pambhar";
    document.getElementById('show').innerHTML=$.param(`personObj`));
  });
</script>
output:firstname=vishal&lastname=pambhar

1
説明のないコードは歓迎されません。コードを説明してください。
L.ガタール

配列またはオブジェクトのシリアライズ表現を作成します(AJAXリクエストのURLクエリ文字列として使用できます)
Vishal Patel

説明を直接編集して、回答に追加してください。コメントではありません。
L.ガタール

-1

答えは少しjQueryの優雅さを使用できます:

(function($) {
var re = /([^&=]+)=?([^&]*)/g;
var decodeRE = /\+/g; // Regex for replacing addition symbol with a space
var decode = function (str) {return decodeURIComponent( str.replace(decodeRE, " ") );};
$.parseParams = function(query) {
    var params = {}, e;
    while ( e = re.exec(query) ) {
        var k = decode( e[1] ), v = decode( e[2] );
        if (k.substring(k.length - 2) === '[]') {
            k = k.substring(0, k.length - 2);
            (params[k] || (params[k] = [])).push(v);
        }
        else params[k] = v;
    }
    return params;
};
})(jQuery);

https://gist.github.com/956897のフォーク


-1

jQuery自体の関数.serializeArray()Link)を使用できます。この関数は、キーと値のペアの配列を返します。結果の例:

[
  { name: "id", value: "1" },
  { name: "version", value: "100" }
]

1
これは求められたものではありません。彼は文字列をハッシュに変換したいと考えています。serializeArrayはフォームを取り、配列を返します。
ダニエルバン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.