使用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(); });