0

私はこのようなhtmlテーブルにいくつかのフォーム入力要素を持っています:

<table>
    <thead>
    ....
    </thead>
    <tr>
        <td><input type="text" name="n_time" id="5030c9261eca0" value="2012" /></td>
        <td><input type="text" name="n_name" id="5030c9261eca0" value="a name" /></td>
        <td><textarea name="n_comment" id="5030c9261eca0">bla</textarea></td>
    </tr>
</table>

今、私はこのフォームデータを使用$.postして私のPHP処理ページに送信する必要があります。

if($_POST['data']){
    $array = json_decode($_POST['data']);

}

だから私はすべてのフォーム要素を取得し、どういうわけかそれをJSONにする必要があります

そしてこれは私がしたことです:

// assume i can get 5030c9261eca0 from my predefined vars...
$my_array = $("#5030c9261eca0").map(function () { return $(this).is("input")?$(this).val():$(this).text(); } );
//now convert
JSON.stringify($my_array);
// the conversion failed with : Uncaught TypeError: Converting circular structure to JSON 

このエラーがポップアップしました:

Uncaught TypeError: Converting circular structure to JSON 

これを修正するにはどうすればよいですか?

また、HTMLフォームを介してHTTPポストを再接着する場合$_POST['n_name']、属性を持つHTMLフォーム要素がある場合、PHPのようにフォームデータを受信できn_nameますが、上記で同じことをどのように達成できますか?

4

2 に答える 2

1

まったく同じID、 5030c9261eca0を持つ2つの異なる変数があります。IDは、特定のHTMLページに対して一意である必要があります。

各要素に一意のIDを付けます。

代わりに、 needToPostなどの共有クラスを検索する各要素を指定し、そのクラスを使用します。

$my_array = $(".needToPost").map(function () { return $(this).is("input")?$(this).val():$(this).text(); } );
于 2012-08-20T15:21:57.623 に答える
1

最初にすべてをループしtr、次にすべてをループして、input,textarea収集した値を配列にプッシュします。

var data = [];      
$('table tr').each(function(){
    var row = {};
    $(this).find('input,textarea').each(function(){
        row[$(this).attr('name')] = $(this).val();
    });
    data.push(row);
});

// now you can use "data" :)

data

[0][n_time] = foo
[0][n_name] = bar
[0][n_comment] = 123
[1][n_time] = foo
[1][n_name] = bar
[1][n_comment] = 123
...

jQuery:

$.post("test.php", { 'mydata': data } );

PHP:

foreach($_POST['mydata'] as $row) {
    echo $row['n_name'];
}

これをjQuery関数に変換することをお勧めします。

(function( $ ) {
  $.fn.tableData = function() {
    var data = [];      
    $(this).find('tr').each(function(){
        var row = {};
        $(this).find('input,textarea').each(function(){
            row[$(this).attr('name')] = $(this).val();
        });
    });
    return data;
  }
})( jQuery );

// Usage:

$.post("test.php", { 'mydata': $('table').tableData() } );
于 2012-08-20T15:22:17.417 に答える