2012-01-31 16 views
2

jQuery AJAXを使用してJSONとして送信したいフォームがあります。そのため、プログラミング言語のネイティブメソッド(OpenEdgeを使用して、サーバー側の一時テーブルに読み込むことができます。 READ-JSON)。私のフォームが生成する必要がJSONの例は:フォームからカスタムJSON文字列を作成する

{"ttOrder": [ 
    { 
    "cProduct": "prod01", 
    "iQty": 123 
    }, 
    { 
    "cProduct": "prod02", 
    "iQty": 456 
    } 
]} 

私の形態は、例えば、製品情報、製品コード、記述等及び数量入力フィールドの行を含むテーブルで構成されています

<input id="prod01" name="prod01" value="0"> 

スタックオーバーフローの周りに検索するから、私は、彼らが役立つかもしれないように私は、私は、フォームをシリアル化する必要があると思うと、見ての提案のカップルが見つかりました:

(function($){ 
    $.fn.serializeJSON=function() { 
     var json = {}; 
     jQuery.map($(this).serializeArray(), function(n, i){ 
      json[n['name']] = n['value']; 
     }); 
     return json; 
    }; 
})(jQuery); 

var obj = {"ttOrder": [$('#prodform').serializeJSON() ]}; 

をそして$アヤックスコールで

{"ttOrder": [ 
    { 
    "prod01": "123", 
    "prod02": "456" 
    } 
]} 
:しかし、これは次のようになります

... 
data: JSON.stringify(obj), 
... 

を使用

私は上記のコードはすべて、入力値と値をキーとして&の値ペアで構成されたJSON文字列を作成していると思いますが、コードを変更して自分のものを取得する方法はありません必要とする。

私が達成しようとしているのは、配列の名前が常にttOrder(テンポラリテーブル名にマップされている)の配列を持つことです。オブジェクトの最初のエントリはプロダクトコードです(常にcProduct - 私の一時テーブルのフィールド名にマップする)、入力の名前の値で、オブジェクトの2番目のエントリは数量です(常にiQty - 私の一時テーブルのフィールド値に対応します)。

私が使用している間違った用語をお許しください。

ありがとうございました。

答えて

3

最初の例は近いです。これはここで動作するはずです:

(function($){ 
$.fn.serializeJSON=function() { 
    return jQuery.map($(this).serializeArray(), function(i, n){ 
     var json = {}; 
     json['cProduct'] = n['name']; 
     json['iQty'] = parseInt(n['value']); 

     return json; 

    }).get(); 
}; 
})(jQuery); 

var obj = {"ttOrder": $('#prodform').serializeJSON()}; 
+0

すばらしかったです。それはほとんど動作しますが、数量は '{" cProduct ":" 01 "、" iQty "ではなく、 ' {"cProduct": "01"、 "iQty": "1" 1} '。私はこれについて何かできることはありますか? –

+0

n ['value']の周りにparseIntを追加すると、このトリックが実行されます。json ['iQty'] = parseInt(n ['value']); –

+0

うん、それはそれをした、それは今完全に動作します。多くの感謝ブライアン! –

関連する問題