【问题标题】:How to send an array to php with jquery ajax?如何使用 jquery ajax 将数组发送到 php?
【发布时间】:2014-03-25 16:30:06
【问题描述】:

我尝试使用 serializeArray 创建一个数组并将其发布到 php。但我的代码不起作用。我读了这个问题 (question) 但我还不明白我的错误。

这是我的ajax代码

    var str = $("form").serializeArray();
    $.ajax({
        type: "POST",
        url: "myfile.php",
        data: str,
        success: function (value) {
            $("#mydata").html(value);
        }
    });

HTML 代码

<form>
    <select name="num0">
        <option value="">num0</option>
        <option value="12">12</option>
        <option value="13">13</option>
    </select>
    <select name="num1">
        <option value="">num2</option>
        <option value="123">123</option>
        <option value="133">133</option>
    </select>
    <select name="num2">
        <option value="">num3</option>      
        <option value="12345">12345</option>
    </select>
</form>

PHP 代码

$postarr = array();
$num=$_POST['num0'];
$postarr[]=$num;
$num=$_POST['num1'];
$postarr[]=$num;
$num=$_POST['num2'];
$postarr[]=$num;

它给了我以下错误信息:

注意:未定义索引:num0(其他变量的消息相同)。

顺便说一句,英语不是我的母语;请原谅打字错误。

【问题讨论】:

  • 我不知道这是否相关,但你的&lt;form&gt; 标签需要一个方法。由于它不是正确的 HTML,因此序列化可能无法正常工作。
  • 使用$("form").serialize(),而不是$("form").serializeArray();,见stackoverflow.com/a/10430571/689579
  • 您是否尝试使用print_r($_REQUEST); 进行调试?
  • @SableFoste: methodaction 是可选的。默认情况下,表单将通过 GET 提交到当前页面。
  • 对我来说很好:jsfiddle.net/XN6aJ(检查请求的标头)

标签: php jquery ajax


【解决方案1】:

使用输入字段的 name 属性,您可以在 $_POST 中创建一个数组:

<form method="post">
    <select name="values[num0]">
        <option value="">num0</option>
        <option value="12">12</option>
        <option value="13">13</option>
    </select>
    <select name="values[num1]">
        <option value="">num2</option>
        <option value="123">123</option>
        <option value="133">133</option>
    </select>
    <select name="values[num2]">
        <option value="">num3</option>      
        <option value="12345">12345</option>
    </select>
</form>

在你的 php 中你可以这样使用它:

$postarr = $_POST['values'];
echo $postarr['num0'];

【讨论】:

  • 感谢@Dinistro,但它给了我这个错误:值未定义
  • @ArvinFirouzi 你也复制了我的 html 吗?对我来说,它工作正常。
【解决方案2】:

试试这个:

   $.ajax({
     type: "POST",
     url: "myfile.php",
     data: $('form').serialize(),
     success: function (value) {
         $("#mydata").html(value);
     }
 });

而不是

$num=$_POST['num0'] 

使用

$num=filter_input(INPUT_POST,'num0');

【讨论】:

  • 感谢@andrew,但是当我尝试回显 $num 时,它不会回显 $num 值。
【解决方案3】:

在表单中添加 id,

  <form id="my_form">
<select name="num0">
    <option value="">num0</option>
    <option value="12">12</option>
    <option value="13">13</option>
</select>
<select name="num1">
    <option value="">num2</option>
    <option value="123">123</option>
    <option value="133">133</option>
</select>
<select name="num2">
    <option value="">num3</option>      
    <option value="12345">12345</option>
</select>

换个方式

  var str = $("#my_form").serialize();

在你的脚本中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-23
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多