【问题标题】:How to pass the array value to PHP using AJAX?如何使用 AJAX 将数组值传递给 PHP?
【发布时间】:2018-02-06 21:11:27
【问题描述】:

我正在尝试使用 AJAX 将数据提交到数据库。我有一个数组,我必须使用 AJAX 将数组的值传递给 PHP 以显示所有相关记录。

<form id="search-form" method="POST">
  <input value="4869" name="compare_id[]" type="hidden">
  <input value="4884" name="compare_id[]" type="hidden">
  <input value="5010" name="compare_id[]" type="hidden">
  <input type="button" id="search-button" name="search-button" value="search">
</form>
<div id="response"></div>

AJAX

<script>
    $(document).ready(function(){
        $('#search-button').click(function(){
            $.ajax( {
                type: 'POST',
                url: 'response.php',
                data: $('#search-form').serialize(),
                dataType: 'json',
                success: function(response) {
                    $('#response').html(response);
                    //alert(response);
                }
            });
        });
    });
</script>

PHP

$sql='SELECT Name, Email FROM request WHERE Id IN (' .( is_array( $_POST['compare_id'] ) ? implode( ',', $_POST['compare_id']) : $_POST['compare_id'] ).')';

    $records = array();
    $query=$conn->query($sql);

    if ($query->num_rows > 0) {
    while($row=$query->fetch_assoc()){ 
        $records[]=$row;
    }
}
echo json_encode($records);exit();

【问题讨论】:

  • 您正在尝试在此处添加带有字符串的数组data:'all='+compare_id,,将您的数组转换为 json 格式然后传递,或者只是将数组传递为 data:compare_id
  • 表单中的字段必须具有唯一的idname
  • compare_id.push($(this).val()); 将获得按钮的值而不是隐藏元素
  • @B.Desai,但我有相同的名称和 ID,因为在 AJAX 的帮助下,我正在显示该输入字段。

标签: php jquery mysql json ajax


【解决方案1】:

HTML

<form id="search-form" method="POST">
  <input value="4869" name="compare_id[]" type="hidden">
  <input value="4884" name="compare_id[]" type="hidden">
  <input value="5010" name="compare_id[]" type="hidden">
  <input type="button" id="search-button" name="search-button" value="search">
</form>
<div id="response"></div>

JS

<script>
    $(document).ready(function(){
        $('#search-button').click(function(){
            $.ajax( {
                type: 'POST',
                url: 'response.php',
                data: $('#search-form').serialize(),
                dataType: 'json',
                success: function(response) {
                    $('#response').html(response);
                }
            });
        });
    });
</script>

PHP

var_dump($_POST['compare_id']);
// it is already an array of ids. You can do whatever you want with it.

【讨论】:

  • 只是想发布相同的答案。但你做得更快+1 :)
  • @Matei Mihai,但是当我点击按钮时,什么也没有发生。
【解决方案2】:

您的代码中有错误。调试此问题的一个好方法是在您的 php 脚本中 print_r 您的 POST 值。

第一个$_POST["All"] 不存在。它是all。 (php)

其次,您发送的是 GET 请求而不是 POST 请求。 (jQuery)

第三,将您的日期格式化为 json。一个好的方法是在compare_id.push 之后创建一个变量,这样更具可读性:

var json_data = {"my_array" : [1,2, "bonjour", 4]};

您的问题主要与“如何调试”有关。我认为您应该打印一路上发生的事情以弄清楚发生了什么。

【讨论】:

  • 感谢@Pobe 注意到代码中的错误。从我这边投票
【解决方案3】:

如下更改您的脚本。您的输出在数组中,因此您不能直接将其添加到 div 中

<script>
    $(document).ready(function(){
        $('#search-button').click(function(){
            $.ajax( {
                type: 'POST',
                url: 'action.php',
                data: $('#search-form').serialize(),
                dataType: 'json',
                success: function(response) {
                     $('#response').html();
                    for(data in response) //loop over your data
                    {
                      $('#response').append(response[data].Email);  //add email
                    }

                    //alert(response);
                }
            });
        });
    });
</script>

【讨论】:

  • 为什么输出没有显示在屏幕上。我在 Network->XHR 中获得输出,然后单击链接和响应选项卡
  • 因为它在数组中。试试我的代码,告诉emails 是否显示
  • 电子邮件正在显示但不在屏幕上。我签入网络选项卡。如何在屏幕上显示
  • 上面的代码也没有显示在屏幕上?你添加了这个:for(data in response) //loop over your data { $('#response').append(response[data].Email); //add email }
  • 是的,它工作正常。我这边有个问题。感谢您的帮助
猜你喜欢
  • 2016-04-22
  • 2011-11-07
  • 2021-02-10
  • 1970-01-01
  • 2014-05-12
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多