使用jQuery ajax的javascript数组到php

可能重复:
通过JQuery $ .ajax将JavaScript数组传递给PHP

我试图将从n个动态生成的输入收集的一些变量传递给带有ajax的php。

 

这是动态生成的输入(可能有1或100)。 现在,如果我在没有ajax的情况下提交它们,它只需要在php中为我提供一个数组

 $services = $_POST['service']; 

但是,如果我想在没有刷新页面的情况下使用ajax做什么呢?

 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("

" + response.msg + "

"); } } });

它只发送第一个服务变量而不是其他(如果有)变量的完整数组。 有什么建议?

你问,选择器(’#services’)只接受第一个输入值。 你应该删除id并只是序列化表单,如下所示。

如果您需要传递的只是表单中的所有值,您可以使用

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

然后在$ _POST [‘service’]中将是一个输入值数组。

例如:

 

在你的JS中:

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

然后在save.php中你可以在$ _POST中得到一个数组:

 var_dump($_POST['service']); 

希望这正是你所需要的。

您应该按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 : .serialize()

使用jQuery.map()创建service[]输入值的干净数组的解决方案。

 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/