2011-10-25 16 views
1

私はAJAX経由で送信しようとしているフォームがあり、JSON文字列に変換する際に問題があります。伝統的な方法でフォームが提出されると、POST配列は2次元配列にソートされます。私が抱えている問題は、Javascriptは名前を2D配列として認識しないということです。以下は私が達成しようとしているものの例です。また、動的なフォームなので、ユーザーが最大7つのセクションを追加できると想像してください。Javascript:フォーム処理

<form id="reg"> 
    //Week 1: rendered by php 
    <input type="checkbox" value="sunday" name="week[0][]" /> 
    //Imagine everyday of the week listed 
    <input type="checkbox" value="saturday" name="week[0][]" /> 

    //Week 2: this section would be rendered by javascript when the user pressed a button 
    <input type="checkbox" value="sunday" name="week[1][]" /> 
    //Imagine everyday of the week listed 
    <input type="checkbox" value="saturday" name="week[1][]" /> 
</form> 

//PHP interpretation 
Array(
    0=>Array(Sunday...Saturday), 
    1=>Array(Sunday...Saturday) 
) 

//Javascript interpretation 
0=>Sunday 
... 
6=>Saturday 
7=>Sunday 
... 
13=>Saturday 

は私の質問を明確にするために、それは可能です/どのように私はJavaScriptを2次元配列としてフォーム名を解釈していますか?

//Javascript code 
function parseForm(){ 
    var x; 
    formContents = new Object(); 

    for(x = 0; x < reg.length; x++){ 
    formContents[reg[x].name] = reg[x].value; 
    } 

    //afterwards, send to another function to convert to json 
} 
+0

フォームをJSONに変換する場合は、生成すると予想されるJSONの例を指定すると効果的です。 '日曜日': 'チェック'、 '月曜日': 'チェックされていない'、... '土曜日': 'チェックされた'}、{'日曜日': 'チェック'、 '月曜日': 'チェックされていない'、.. 'Saturday ':' checked '}] '。 – RobG

+0

何かの行に沿って:(チェックされた値を提出するだけです) [{"0":{"sunday": "チェック"、 "monday"}}、{"1":{"火曜日": "チェック" "wednesday": "checked"}}] – Josh

+0

チェックされている場合にのみ提出された場合、チェックされた日の名前が必要ですので、 '[['sunday'、 'saturday']、['tuesday'、 'wednesday' ]] 'で十分です。 – RobG

答えて

0

あなたはhttp://api.jquery.com/jQuery.post/を見ましたか? dataTypeはjsonにすることができます。その後、http://api.jquery.com/jQuery.parseJSON/を使用します。

ここでは、より多くのフィールドを追加できる方法の例: *現在の週数(タグ内の隠されたフィールド) を格納するための一つのフィールドを使用してください*関数は、フィールド(以下jQueryのクリック機能)

<script> 
$('#add').click(function(){ 
    // setup variable 
    var count = $('input[name=week_count]').val(); 

    // debug 
    alert('current count value is ' + count); 

    // now append all 7 days 
    // will work this with an array and a string 
    var days = array('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday'. 'saturday'. 'sunday'); 

    // add + 1 to the count 
    var count = count + 1; 
    // update the field 
    $('input[name=week_count]').attr('value', count); 

    var string = ''; 
    for(var i in days){ 
     string+= '<input type="checkbox" name="week[' + count + '][]" value="' + days[i] + '" />'; 
    } 

    // append to the div id reg 
    $('#reg').append(string); 

    // done 
}); 
<script> 

<html> 
    <input type="hidden" name="week_count" value="0" /> 
</html> 
+0

入力いただきありがとうございます。しかし、私の問題は、JavaScriptでフォームを処理することです。私がフォームをループしようとすると、各チェックボックスは、配列から離れておらず、互いに独立しています。たとえば、私の元の投稿では、私は2週間、week0とweek1を持っています。私は1つの2Dアレイを持ち、各サブアレイには1週間の情報が含まれています。例: formContents = new Object(); formContents ["week0"] =新しい配列(); formContents ["week1"] =新しい配列(); formContents ["week0] .push(" monday "、" tuesday "); formContents [" week1] .push( "wednesday"、 "friday"); – Josh

+0

現在、これはJavaScriptがフォームの名前を解釈する方法です。 week [0] [] = "sunday" week [0] [] = "monday" week [1] [] = "wednesday" week [1 (week [0] =( "sunday"、 "monday")、week [1] =( "wednesday"、 "thursday"))] [] = "thursday" – Josh

+0

これは私がそれをしたい方法です: 配列 – Josh

0
を追加追加

解決策を見つけました。 PHPとは異なり、JavaScriptは名前を配列に変換せず、リテラル文字列として扱います。したがって、name = "week []"はweekという配列を作成しませんが、文字列 "week []"を作成します。フォームを処理するには、手動で週をチェックする必要があります。助けをいただき、ありがとうございました。