2

私は次のようなフォームを送信しています:

formdata = $("#app_form").serialize()
formdata['apps'] = apps
hash = { type: "POST", url: "create_all", data: formdata }
$.ajax(hash)

フォームデータは投稿されますが、行は次のとおりです。

formdata['apps'] = apps

完全に無視されます。Coffeescript と Javascript がどのようにして行を完全に無視できるのか理解できません。とても興味深い。

アプリハッシュの構造は次のとおりです。

{ "a" => { "1", "2", "3" },
  "b" => { "4", "5", "6" },
  ...
  "n" => { "x", "y", "z" } }

もしも:

formdata['apps'] = apps

実行後に機能しません:

formdata = $("#app_form").serialize()

次に、提出前にアプリのハッシュをフォームデータのハッシュに追加するにはどうすればよいですか?

4

3 に答える 3

2

.serialize()オブジェクトではなくクエリ文字列を返すため、クエリ文字列に引数を追加するには、文字列連結を使用します

formdata += '&apps=' + encodeURIComponent(apps);

apps が文字列であると仮定します。

于 2012-09-21T18:54:39.327 に答える
1

ルーチンはjQuery.ajax()オブジェクト (ハッシュ) を想定しているため、実際には文字列にシリアライズする必要はまったくなく、すべてのフォーム データを取得するだけです。

幸いなことに、jQuery にはフォーム データ バージョンより前のバージョンのコマンドがありますが.serializeArray()、これは次の形式の配列を生成します。

[ {'name': ..., 'value': ... }, ...]-あなたが望むものではありません。

したがって、すべてのフォーム要素を取得する方法を複製できますが、これはかなり複雑なフィルターです。または、そこからの出力を必要なものに再配置することもできます。

あなたのapps変数はAJAX経由で快適に渡されることはありませんJSON.stringify().. これは現在、ほとんどのブラウザに組み込まれていますがjson2.js、バックアップとして jQuery をロードすることをお勧めします (ネイティブ ルーチンが利用できない場合にのみ機能します)。appsネイティブの JSON デコード ルーチンを使用して、使用するバックエンド言語で JSON から復元できます。これは現在、ほぼすべての言語に搭載されています。

var formdata = { 'apps': JSON.stringify(apps) };
$.each($("#app_form").serializeArray(), function(cIndex, cEntry) {
    formdata[cEntry.name] = cEntry.value;
});

$.ajax({ type: "post",
         url: "create_all",
         data: formdata }};
于 2012-09-21T19:46:51.603 に答える
-1

あなたが述べたことから、有効なjsonのようには見えず、jqueryデータパラメーターは有効なjsonを期待しています..

なぜあなたは次のようなものを使わないのですかJSON.parse($("#app_form").serialize())

于 2012-09-21T18:56:32.563 に答える