【问题标题】:Reading serialized jquery data in PHP (multiple checkboxes)在 PHP 中读取序列化的 jquery 数据(多个复选框)
【发布时间】:2012-02-04 00:25:02
【问题描述】:

查询:

$(document).ready(function(){
    $('form').submit(function(){
        var content = $(this).serialize();
        //alert(content);
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'http://localhost/test/generate',
            timeout: 15000,
            data:{  content: content },
            success: function(data){
                $('.box').html(data).fadeIn(1000);
            },
            error: function(){
                $('.box').html('error').fadeIn(1000);
            }
        });
        return false;
    });
});

HTML:

<form>
<input type="checkbox" value="first" name="opts[]">
<input type="checkbox" value="second" name="opts[]">
<input type="checkbox" value="third" name="opts[]">
<input type="submit">
</form>

我如何在 PHP 中处理(或读取)多个选中复选框的值?我尝试使用$_POST['content'] 来获取序列化数据,但没有成功。

【问题讨论】:

  • 是否有理由需要以 JSON 格式发送数据?表单的默认帖子将使您的数据以$_POST['opts'] 的形式提供(它将返回一个数组)。如果您需要将其保留为 json,请尝试 var_dump($_POST) 看看您得到了什么。
  • 他没有以 JSON 格式发送数据。 dataType 参数表示服务器响应内容类型,而不是请求。
  • @Darin 啊,我用 jQuery 工作的不多,(它显示了吗?:D)但我指的是他的表单序列化和data:{ content: content }
  • @Grexis,这不是 JSON。 jQuery 自动将此 javascript 文字序列化为 application/x-www-form-urlencoded 请求。与 JSON 无关。如果您想将 JSON 发送到服务器,您可以指定 contentType: 'json',然后 JSON 序列化请求:data: JSON.stringify({ content: 'some content' })
  • @Darin 我要停下来,我(有点)领先。不过,我认为这是最好的学习方式

标签: php jquery ajax


【解决方案1】:

替换:

data:{  content: content } // <!-- you are prefixing with content which is wrong

与:

data: content

现在您可以在您的 PHP 脚本中使用$_POST['opts'],它通常应该返回一个数组。

【讨论】:

    【解决方案2】:

    试试

    echo $_POST['opts'][0]. "<br />";
    echo $_POST['opts'][1]. "<br />";
    echo $_POST['opts'][2]. "<br />";
    

    您将一个数组发布到服务器,它在发布变量“opts”中可用。请记住:未选中的框不会被发布。

    【讨论】:

      【解决方案3】:

      选择的答案仍然对我不起作用,但以下是起作用的:

      var checkedBoxesArr = new Array();
      $("input[name='checkedBoxes']:checked").each(function() {
          checkedBoxesArr.push($(this).val());
      });
      var checkedBoxesStr = checkedBoxesArr.toString(); 
      var dataString = $("#" + formID).serialize() + 
                        '&checkedBoxesStr=' + checkedBoxesStr;
      

      [上面的代码在你的 javascript 中,在序列化表单数据之前]
      首先,循环检查复选框并将它们放入一个数组中。
      接下来,将数组转换为字符串。
      最后,手动将它们附加到序列化的表单数据中——这样您就可以在 PHP 中引用字符串以及其余的序列化数据。

      这个答案部分来自这篇文章:Send multiple checkbox data to PHP via jQuery ajax()

      【讨论】:

        【解决方案4】:

        您的代码中有错误:

        1. 网址应为url: 'http://localhost/test/generate.php',并带有扩展名

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-08
          • 2011-11-14
          • 2019-07-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多