使用 Jquery 收集数组中的行 ID,然后为新表查询这些值

Posted

技术标签:

【中文标题】使用 Jquery 收集数组中的行 ID,然后为新表查询这些值【英文标题】:Collecting Row IDs in an Array using Jquery and then Querying those values for a new table 【发布时间】:2015-06-05 16:10:25 【问题描述】:

我正在尝试使用 jquery/php 设置一个函数,其中用户在具有特定 ID 的行中选择一个复选框(该 ID 与我的数据库中行数据的主键匹配),将每个行 ID 存储到一个数组,然后单击“比较选定的行”按钮将其传递到一个新页面,其中仅显示那些选定行的结果表。

每个输入看起来像这样

<input type='checkbox' id='$id' class='compareRow'></input>

我是 jquery 的新手,并计划使用我之前编写的脚本的变体来以模式显示动态行数据。我不确定这段代码是否相关,但它还将行 ID 传递给另一个 php 页面以查询数据库。请注意,这在过去仅用于单个查询,这个新函数需要在查询级别使用某种 foreach 语句才能处理 ID 数组,我确定。

这是我一直在尝试调整的脚本

$(function()
    $('.compareRow').click(function()
      var ele_id = $(this).attr('id');

       $.ajax(
          type : 'post',
           url : 'query.php', //query 
          data :  'post_id='+ ele_id, // passing id via ajax

       success : function(r)
           
          other code? 
                     );
           
         );
    );
    );

我知道这里还有更多需要,但这只是我目前所拥有的,任何帮助将不胜感激。

更新,所以我创建了页面并具有以下内容:

在我的 compareSelected.php 中,我有以下代码:

if(isset($_POST['post_id']))
    $compare_received = $_POST['post_id'];

print_r($compare_receive);

它返回未定义的索引。

我还修改了代码以更改为该页面,如下所示:

$('.compareRowButton').click(function()
          var ids = [];
          //loop to all checked checkboxes
          $('.compareRow:checked').each(function()
          //store all id to ids
          ids.push($(this).attr('id'));
      );
       $.ajax(
          type : 'post',
           url : 'compareSelected.php', //query 
          data :  post_id:ids, // passing id via ajax

       success : function(r)
           
          window.location = 'compareSelected.php';

           
         );
    );

不知道为什么它不会拾取数组值。

【问题讨论】:

【参考方案1】:

如果您已设置好当前的实现,则可以在 rows 数组中维护对每个 ajax 调用返回的数据的引用。稍后,您可以实现一个按钮,该按钮触发一个函数以将行数据附加到您的表中。当然,您可能需要在追加之前解析请求返回的数据。

$(function()
  var rows = [];
  $('.compareRow').click(function()
    var ele_id = $(this).attr('id');
    $.ajax(
      type : 'post',
      url : 'query.php', //query 
      data :  'post_id='+ ele_id, // passing id via ajax

      success : function(data)
        rows.push(data);
      
    );
  );
  $('.displayTable').click(function()
    // append to table or divs
  );
);

我建议您避免在此处重新加载页面。或者,如果必须,请在下一页上发出 Ajax 请求。您希望避免在不同的 jQuery 模块之间紧密耦合您的逻辑。应该使用 Ajax 来异步加载数据,而不需要重新加载页面。

【讨论】:

我决定听取您的建议并使用此脚本,但想知道我需要做什么才能将数据解析回可显示的格式?【参考方案2】:

在您的代码上。每次单击复选框时发送 ajax 请求。 最好在发送 ajax 请求之前制作另一个按钮或其他东西。

$('SOME_ELEMENT').click(function()
      var ids = [];
      //loop to all checked checkboxes
      $('.compareRow:checked').each(function()
          //store all id to ids
          ids.push($(this).attr('id'));
      );
       $.ajax(
          type : 'post',
           url : 'query.php', //query 
          data :  post_id:ids, // passing id via ajax

       success : function(r)
           
          other code? 
                     );
           
         );
    );

【讨论】:

太棒了,很有意义,让我很高兴知道通过重用这个特定的脚本我有点走上正轨。关于下一页的 PHP 端(生成新表的位置)有什么想法可以让 PHP 识别“ids”数组并在一个查询中循环遍历每个值吗?还是我只是创建一个循环并让它重新查询数组中的每个值? 在您的query.php 上,您可以使用$_POST['post_id'] 访问那些ids 那么query.php里面有什么? 抱歉,按回车键太早了。代码在上面 我明白了。为什么不正常提交表单?

以上是关于使用 Jquery 收集数组中的行 ID,然后为新表查询这些值的主要内容,如果未能解决你的问题,请参考以下文章

将 spark DataFrame 中的行收集到 JSON 对象中,然后将对象放入另一个 DF

JQuery 对带有checkbox的table操作 遍历选中的行的某一列的数据

Javascript - 计算对象数组中的重复项并将计数存储为新对象

单击编辑按钮时,Kendoui Grid 获取选定的行 ID

Python Datatable/Pydatatable:如何通过正则表达式过滤数据表中的行并根据过滤器为新变量赋值

使用 jquery 仅显示数据库中的最新行