7

正しく送信し、完全なモデルをコントローラーに送信する AJAX フォームがあります。私が望むのは、リクエストで送信される JSON を追加することです。次のようにPOSTを傍受することができました:

$(document).ready(function() {
    $("form").submit(function(e) {
        if (e.originalEvent.explicitOriginalTarget.id == "submit") {
        }
    });

私が知らないのは、フォーム送信時に最初に送信されたデータを保持しながら、JSON データを送信する方法です。隠しフィールドを追加し、その値を JSON 文字列に設定してから、サーバー上で逆シリアル化することを考えましたが、それはかなり間違っているようです。

4

4 に答える 4

5

AJAX を使用できない場合は、隠しフィールドを使用して JSON データをフォーム内に格納する必要があります。そうしないと、JSON がサーバーに送信されません。HTML 仕様では、ルールが明確に規定されています。このフォームが送信されると、フォーム内の入力フィールドに含まれる値のみがサーバーに送信されます。

于 2012-08-21T13:05:46.507 に答える
2

関数 jQuery を自由に使用してください。

$.fn.addHiddenInputData = function(data) {          
      var keys = {};          
      var addData = function(data, prefix) {          
          for(var key in data) {
              var value = data[key];
              if(!prefix) {
                var nprefix = key;                                            
              }else{
                var nprefix = prefix + '['+key+']';
              }
              if(typeof(value) == 'object') {                                    
                  addData(value, nprefix);
                  continue;
              }
              keys[nprefix] = value;
          }          
      }          
      addData(data);          
      var $form = $(this);      
      for(var k in keys) {
          $form.addHiddenInput(k, keys[k]);
      }

}
$.fn.addHiddenInput = function(key, value) {      
      var $input = $('<input type="hidden" name="'+key+'" />')
      $input.val(value);
      $(this).append($input);

}

使用法:

// click event is fired before submit event
$('#form input[type="submit"]').click(function(){

  // add some JSON data before submit
  $('#form').addHiddenInputData({
    'foo': 123,
    'bar': 456,
    'foo2': {
      'bar': 123
    }
  });
});

ajax を使用する必要はありません。

于 2012-08-21T13:08:00.787 に答える
0

jQuery ドキュメントの情報を読むと、$.post()に Data オプションがあることがわかります。

  • data : リクエストとともにサーバーに送信されるマップまたは文字列。

例 :

$.post("test.php", { name: "AdrianMar" } );

通常の でフォームの値を取得できます$("form").serialize()

于 2012-08-21T13:06:29.697 に答える
0

実際の Ajax 投稿を行うには、JQuery.Ajax (より多くのオプションがあります) またはJQuery.Postを使用できます。

$("form").serialize()データについては、フォームのすべてのデータを取得するために使用できます。次に、このように追加データを手動で追加できますvar data = $("form").serialize() + ",other=data"。大量のデータを追加する場合、これは面倒になる可能性があります。より簡単なオプションは、フォーム内に隠しフィールドを追加することであり、呼び出し時にデータに含まれますserialize()

サンプル: -これは、余分なデータを含む隠しフィールドを含むすべてのデータを投稿します。

$.post('www.magicurl.com/api', $("form").serialize(),
                function (data) {
                    //process data from server
                });
于 2012-08-21T13:10:42.193 に答える