簡體   English   中英

jQuery POST多維表單數組

[英]jQuery POST multidimensional form array

我有一個表單,它從所有輸入中收集數據作為一個多維數組,並使用標准表單提交函數,這將加載目標頁面,PHP腳本完美地讀取多維數組,並產生所需的輸出。

<form action="target.php" method="post">

<?php foreach ($days as $day) { ?>

    <select name="roster[<?php echo $day->date() ?>][1]"> ... </select>
    <select name="roster[<?php echo $day->date() ?>][2]"> ... </select>
    <select name="roster[<?php echo $day->date() ?>][3]"> ... </select>

<?php } ?>

<input type="submit">
</form>

在目標PHP文件中,我只是在$_REQUEST['roster'] ,然后我可以將它作為普通的PHP數組使用它。 很簡單就可以了。

但是,我想使用jQuery將其轉換為AJAX請求。 我已經閱讀了一些建議,說使用$('form').serialize()$('form').serializeArray()來獲取表單數據,但這不能正確讀取數組,並產生一些奇怪的輸出。

我目前正在玩其他建議,主要涉及遍歷DOM並從元素數據構建一個新的javascript數組或對象,然后通過$.ajax()發送它,但這一切似乎都是不必要的復雜。

我的問題是:有沒有一種簡單的方法通過jQuery和$.ajax()發送這個表單數組數據?

很可能有,並且它會明顯流血,但此刻我看不到它!

編輯:

以下是來自標准表單提交函數的$_REQUEST['roster']print_r輸出:(為了可讀性而使用<pre>格式化):

Array
(
[2013-04-06] => Array
    (
        [1] => 8
        [2] => 3
        [3] => 7
    )

[2013-04-13] => Array
    (
        [1] => 4
        [2] => 3
        [3] => 7
    )

[2013-04-20] => Array
    (
        [1] => 8
        [2] => 17
        [3] => 7
    )

[2013-04-27] => Array
    (
        [1] => 4
        [2] => 3
        [3] => 7
    )

)

這是$('form').serialize()的輸出$('form').serialize()

roster%5B2013-04-06%5D%5B1%5D=8&roster%5B2013-04-06%5D%5B2%5D=3&roster%5B2013-04-06%5D%5B3%5D=7&roster%5B2013-04-13%5D%5B1%5D=0&roster%5B2013-04-13%5D%5B2%5D=0&roster%5B2013-04-13%5D%5B3%5D=0&roster%5B2013-04-20%5D%5B1%5D=0&roster%5B2013-04-20%5D%5B2%5D=0&roster%5B2013-04-20%5D%5B3%5D=0&roster%5B2013-04-27%5D%5B1%5D=0&roster%5B2013-04-27%5D%5B2%5D=0&roster%5B2013-04-27%5D%5B3%5D=0

$('form').serializeArray()

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

如果我然后使用從每個[object Object]提取數據

$.each(data, function(index1, value1) {
    $.each(value1, function(index2, value2) {
        $('body').append('index1: '+index1+' value1: '+value1+' { index2: '+index2+' value2: '+value2+' }');
    });
});

我明白了:

index1: 0 value1: [object Object] { index2: name  value2: roster[2013-04-06][1] }
index1: 0 value1: [object Object] { index2: value value2: 8 }
index1: 1 value1: [object Object] { index2: name  value2: roster[2013-04-06][2] }
index1: 1 value1: [object Object] { index2: value value2: 3 }

...等...每個輸入。

顯然,從$.each輸出,我應該能夠以object.name和object.value的形式訪問數據,然后將所有內容格式化為一個新的數組,以使其與我的PHP腳本一起使用,但是這樣做是這樣的? 或者,還有更好的方法?

The .serialize() method creates a text string in standard URL-encoded notation.

這意味着它將用%5B%5D替換[] 由於它是一個文本字符串,因此一種方法是將它們替換回來。

var ser = $('#id').serialize();

ser = ser.replace(/%5B/g,"[");
ser = ser.replace(/%5D/g,"]");

JS小提琴

更簡單的是使用jQuerys $ .param()函數。 http://api.jquery.com/jquery.param/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM