2012-01-02 65 views
0

可能重複:
Passing JavaScript Array To PHP Through JQuery $.ajaxJavascript數組與jQuery的AJAX PHP的

我試圖通過從n個動態生成的輸入與AJAX到PHP蒐集了一些變數。

<input type="text" class="big" id="service" name="service[]" maxlenght="100"/> 

這是動態生成的輸入(可能是1或100)。 現在,如果我提交他們沒有Ajax它讓我簡單地做

$services = $_POST['service']; 

但是,如果我想用Ajax做什麼而無需刷新頁面PHP中的數組?

var action = $("form_act").attr('action'); 
var form_data = { 
    service: $("#service").val(), 
    ajax_request: 1 
}; 
$.ajax({ 
    type: "POST", 
    url: action, 
    data: form_data, 
    dataType: "json", 
    success: function (response) { 
     if (response.error == 'none') 
      $("#form_content").slideToggle('slow', function() { 
       $('#form_content').load('includes/db_setup_form.php'); 
       $("#form_content").delay(500).slideToggle('slow'); 
      }); 
     else { 

      $("#ajax_response").html("<p>" + response.msg + "</p>"); 

     } 
    } 
}); 

它只發送第一個服務變量,而不是一個完整的數組與其他(如果有)變量。有什麼建議麼?

+0

已經讀了,但我不知道如何繼續在這種情況下,因爲我已經1個多變量發送(在上面的代碼中,我只包括數組我需要通過,但我有更多的投入發送)。 – g0dl3ss 2012-01-02 08:42:55

+0

這應該也是有幫助的:http://stackoverflow.com/questions/1184624/serialize-form-to-json-with-jquery – Geert 2012-01-02 08:47:13

回答

3

你問題的選擇器('#服務')只需要第一個輸入值。你應該刪除id並且只是序列化形式如下。

如果你需要傳遞是從形式的所有值,你可以使用

data: $('form#my-form').serialize() // this code puts all of the inputs into passable and readable for PHP, way. 

然後在$ _ POST [「服務」]將輸入值的數組。

例如:

<form action="save.php" method="post" id="services"> 
    <input type="text" name="service[0]" value="1st Service" /> 
    <input type="text" name="service[1]" value="2nd Service" /> 
    <input type="text" name="service[2]" value="3rd Service" /> 
    <input type="text" name="service[..]" value=".. Service" /> 
    <input type="text" name="service[N]" value="N Service" /> 
</form> 

在您的JS:

$.post($('form#services').attr('action'), $('form#services').serialize(), function(response) {}); 

然後在save.php你可以在$ _POST數組:

var_dump($_POST['service']); 

希望這是正是你所需要的。

+0

如果我想發送另一個變量(ajax_request)與來自形成?謝謝 – g0dl3ss 2012-01-03 10:26:47

+0

試過'data:$('form#invoice_form')。serialize(),ajax_request:1,'但它不起作用 – g0dl3ss 2012-01-03 11:02:50

+0

$('form#invoice_form')。serialize()+'&ajax_request = 1' ;也許...).serialize()返回url編碼的字符串,因此您可以通過添加&key = value將對鍵值添加到此字符串中。 – devdRew 2012-01-03 11:12:54

2

您應該通過name屬性選擇輸入,因爲在HTML文檔中使用相同ID的多個元素是無效的。你的jQuery選擇器知道它正在尋找什麼應該是一個獨特的元素,所以它在找到第一個元素後會停止。此外,.val()函數僅查找所選元素集合中第一個元素的值。

這裏是我會改變:

var form_data = { 
    service: $("#service").val(), 
    ajax_request: 1 
    }; 

要:

var form_data = { 
    service: $('[name="service[]"]').serialize(), 
    ajax_request: 1 
    }; 

這裏是一個演示:http://jsfiddle.net/sS7YP/

這裏是.serialize()的文檔:http://api.jquery.com/serialize

+0

這看起來很有希望,我會盡快測試它。謝謝 – g0dl3ss 2012-01-02 09:41:19

2

一解決方案,它創建一個乾淨的數組您的service[]輸入的值,使用jQuery.map()

var $form = $('#form_id'), 
    $inputs = $form.find('input[name^=service]'); // Do not select by ID 

$form.on('submit', function(event) { 
    // Build an array only containing the services values 
    var values = []; 
    $.map($inputs, function(e) { 
     values.push(e.value); 
    }); 
    event.preventDefault(); 
}); 

http://jsfiddle.net/eTU2y/1/