2

Cakephp フォームを使用してフォームを作成しています。次のようなフォームを作成しています:

<form name='license' action='/some/action' action='POST'>

  <input type="text" id="license0Number" name="data[license][0][number]">
  <input type="text" id="license0Year" name="data[license][0][year]">

  <input type="text" id="license1Number" name="data[license][1][number]">
  <input type="text" id="license1Year" name="data[license][1][year]">

</form>

通常の形式でフォームを送信し、次のようなデータを取得すると、正常に機能します。

$data = array( 'license' => array( '0' => array( 'number'=>'123', 'year'=>'2000' ),
                                   '1' => array( 'number'=>'321', 'year'=>'2003' )
                                 );

しかし、jQuery$.ajax()関数を使用して同じフォームを送信し、関数でデータを投稿するとserialize()。サーバー側でこのようなデータを取得しています。

Array
(
[data%5Blicense%5D%5B0%5D%5Bnumber%5D] => 123
[data%5Blicense%5D%5B0%5D%5Byear%5D] => 2000
[data%5Blicense%5D%5B1%5D%5Bnumber%5D] => 321
[data%5Blicense%5D%5B1%5D%5Byear%5D] => 2003
)

jQuery $.ajax() 関数を使用する場合、フォームデータを関連配列の形式で取得するにはどうすればよいですか?

編集:

$('#license_form').live( 'submit', function( event ) {

  var action = '/some/action';
  var data = $(this).serialize();

  $.ajax({

     type: "POST",
     url: action,
     data: data, // form data
     success: function( result ) { alert( result ); },
     error: function() { alert('error'); }
  });

   event.preventDefault();
});

ありがとう

4

5 に答える 5

1

低レベルの ajax を使用する必要はありません。代わりに $.post ショートハンドを使用してください。

これを試して:

$(function(){

  $("#submit").click(function(){
     //Since you're talking about POST
     $.post('path_to_php_script.php', {

       "license0Number" : $("#license0Number").val(),
       "license0Year"   : $("#license0Year").val(),
       "license1Number" : $("#license1Number").val(),
       "license1Year"   : $("#license1Year").val()


      }, function(respond){

          //Respond from PHP
          //Maybe replace some div with the server respond?
          $("#some_div").html(respond); //optional   
      });

   });  

});

jquery を使用して POST ASSOC ARRAY を要求したので、それが得られます。

あなたのphpスクリプトで:

<?php

print_r($_POST); //will print what you want
于 2012-09-03T12:36:28.117 に答える
0

値を使用.serializeArray()して手動でエンコードできます。

var values = form.serializeArray();
for (var i = 0; i < values.length; i++)
    values[i] = encodeURIComponent(values[i].value);
values = values.join('&');
于 2012-09-03T12:14:09.920 に答える
0

考えられる解決策の1つは、サーバー側でキー文字列を解析し、PHPで関連する配列を構築することです...

于 2012-09-03T12:14:33.453 に答える
0

jQuery.paramはあなたが探しているものだと思います。

于 2012-09-03T12:20:50.727 に答える
0

serializeArray(); あなたが探しているものです

于 2013-01-21T11:51:04.003 に答える