簡體   English   中英

如何通過$ .post將javascript對象數組發送到php腳本?

[英]How can I send an array of javascript object to a php script via $.post?

我的頁面上有一張數據表。 列是“開始”,“結束”,“注釋”和“選項”。 在選項列中有一個刪除行的按鈕,以及一個使表的行可編輯的按鈕。 這允許更改“開始”,“結束”和“注釋”的值。 再次單擊它即可完成編輯過程。 最后,有一種方法可以向表中添加另一行。 所有這些都按預期工作。

我想在底部添加一個按鈕,該按鈕從表中的數據創建一個數組,看起來像這樣(純粹表示為JSON,以便於向SO展示:不需要):

[
    {
        "start"     :"2009/08/01",
        "end"       :"2009/08/08",
        "comment"   :"an example date.",
    },
    {
        "start"     :"2009/07/01",
        "end"       :"2009/07/08",
        "comment"   :"another example date, a month earlier.",
    },
    {
        "start"     :"2000/07/01",
        "end"       :"2000/07/08",
        "comment"   :"another example date, a year earlier. You get the idea.",
    }
]

我不應該在構建數組時遇到太多麻煩,但是一旦有了,我如何將其發布到后端php腳本(然后它將使用put_csv()將數據寫入文件)? 理想情況下,它將以陣列格式在服務器端可用,以允許進行驗證。

如果需要,我很高興使用jquery。

如何將其終止到服務器取決於您要歸檔的內容。 如果要加載將處理數據的新頁面,則可以使用帶有隱藏輸入的常規表單。 另外,如果您想通過AJAX在后台處理,請使用CRasco所說的jQuery.ajax 無論使用哪種方式,都需要將結構化數組轉換為簡單的鍵/值列表。

一種選擇是生成一個JSON文檔(我不認為jQuery為此提供了功能,但是您可以輕松地找到一些東西)並在序列化文檔中使用單個字段。 然后在服務器端,您將使用json_decode取回陣列。 如果使用的是AJAX方法,則jQuery.ajax調用中的data選項將包含:

{
    'data': '[{"start":"2009/08/01","end":"2009/08/08","comment":"an example date."},...'
}

更好的方法是將其序列化為PHP可以理解的格式的字段列表。 這意味着您無需執行任何特殊操作,並且$_POST['data']將包含數組。 例如:

{
    'data[0][start]': '2009/08/01',
    'data[0][end]': '2009/08/08',
    'data[0][comment]': 'an example date.',
    'data[1][start]': '2009/07/01',
    'data[1][end]': '2009/07/08',
    'data[1][comment]': 'another example date, a month earlier.',
    ... 
}

如果使用的是form方法,則需要生成如下輸入字段:

<input type="hidden" name="data[0][start]" value="2009/08/01" />

我肯定會使用jQuery。 這是$ .post()函數的頁面。

http://docs.jquery.com/Ajax/jQuery.post

一個警告是$ .post()是$ .ajax()函數的包裝,該函數被簡化並消除了為成功的帖子以外的任何內容設置回調的能力。 對於通過AJAX進行的重要交易,我將使用以下方法:

http://docs.jquery.com/Ajax/jQuery.ajax

一個例子是:

$.ajax({
      url: "script.php",
      global: false,
      type: "POST",
      data: ({id : this.getAttribute('id')}),
      dataType: "html",
      success: function(msg){
         alert(msg);
      }
   });

暫無
暫無

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

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