2012-01-02 33 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/