【问题标题】:How to do a AJAX click post on every PHP foreach result如何在每个 PHP foreach 结果上进行 AJAX 点击发布
【发布时间】:2017-06-13 09:50:43
【问题描述】:

我已经阅读了多种答案,但没有一个有效。 我尝试做的是使 PHP foreach 循环的每个结果都可点击,然后使用 AJAX 将该数据发送到另一个 PHP 文件,现在的问题是无论我做什么,只有最后一个 foreach 结果总是被发送而不是结果我点击了? (无数据库)

循环存在于函数functions.php中:

public function getForeachResult ()
{
    $response = $this->GetObject($parameters);

        include 'template.php';
}

处理结果的模板template.php:

<?php
foreach ($response->Result->List as $key =>$value) {

    ?><table id="mytable"><tr>
        <th>ID</th>
        <th>Date</th>
        <th>firstname</th>
        <th>lastname</th>
    </tr>

    <?php foreach ($value as $key=>$value) {?>

            <tr class="myrow">
            <td><?php echo $value->ID; ?></td>
            <td><?php echo date("d-m-Y", strtotime($value->Time)); ?></td>
            <td><?php echo $value->FullName; ?></td>
            <td><?php echo $value->LastName; ?></td>
            </tr>

    <?php } ?>

    </table><br />

<?php } ?>

在 template.php 的底部调用 AJAX 脚本:

<script>
$('.myrow').click(function() {
    $.ajax({
        type: "POST",
        cache: false,
        url: "post.php",
        data: { action: 'goTo', value: <?php echo $value->ID ?>}
    }).done(function( msg ) {
        $('.Data').html(msg);
    });
});

在发送 dat 的 post.php 中,我只得到 foreach 循环的最后一个结果 post.php:

if($_POST['action'] == 'goTo') {
    var_dump ($_POST);
}

那么我如何确保 AJAX 发送我点击的数据?

【问题讨论】:

  • 数据:{ 动作:'goTo',值:$(this).find(td:first).text().trim()}
  • 这里的问题是您没有点击哪一行的独特标识符。这就是为什么您始终只能获取最后一行的原因。您应该改为向您的表格添加一个可点击的按钮,该按钮将是唯一的
  • 您在第二个循环中重复使用变量$key$value,这可能会导致意外结果。重命名第二个循环中的变量。
  • 你只得到最后一个值,因为这是你输出的唯一东西——你的 JS 代码在你的 foreach 循环之外。不,你不想把它放在里面,那也没有意义——你必须为每一行定义一个单独的点击处理程序。正如@JYoThI 建议的那样,只需在点击发生时从 HTML 代码中读取数据。

标签: javascript php jquery ajax foreach


【解决方案1】:

试试:

`<td class="id"><?php echo $value->ID; ?></td>
<script>
 $('.myrow').click(function() {
   var id = $(this).find('.id').text();
   $.ajax({
    type: "POST",
    cache: false,
    url: "post.php",
    data: { action: 'goTo', value: $(this).find(td:first).text().trim()}
   }).done(function( msg ) {
    $('.Data').html(msg);
  });
});`

我认为您在数据字段中的 php 表达式只保留了最后一个 id,因为您在 html 中循环但在 ajaxcall 中您已经在循环的末尾。

编辑:接受评论

【讨论】:

  • 谢谢,这门课效果很好,很清楚
【解决方案2】:

所以,为了解释原因,我认为你在脑海中搞砸了一些小事情,这会导致混乱。您的 PHP 文件不会在 Ajax 中将任何内容发送到另一个 PHP 文件。您的 PHP 文件构建了一个 HTML 页面,该页面中的 Javascript 以 Ajax 发送数据。

请记住,在 PHP 中,您构建了一个以后执行的未来 JS 代码。如果必须在 Ajax 调用期间检索动态变量或发送其数据,则将由 JS 来完成,而不是 PHP。

因此,就像其他答案建议的那样,您必须在 JS 中检索 id,而不是 PHP。

【讨论】:

  • 感谢您的解释,我的 JS 不是最好的,但以后肯定会记住这一点
【解决方案3】:

你只需要像这样获取点击的id

    $('.myrow').click(function() {
    var id = $(this).children("td.first").text();
    $.ajax({
        type: "POST",
        cache: false,
        url: "post.php",
        data: { action: 'goTo', value: id}
    }).done(function( msg ) {
        $('.Data').html(msg);
    });

无需更改表格 html 即可正常工作

【讨论】:

    【解决方案4】:

    您需要像这样在点击时使用 traverse 动态查找每一行的值

    var clicked_row_id = $(this).find('td:first').text().trim();
    

    数据应该这样发送

    data: { action: 'goTo', value: clicked_row_id }
    

    更新 1:

    $('.myrow').click(function() {
    
        var clicked_row_id = $(this).find('td:first').text().trim();
    
        $.ajax({
            type: "POST",
            cache: false,
            url: "post.php",
            data: { action: 'goTo', value:clicked_row_id }
        }).done(function( msg ) {
            $('.Data').html(msg);
        });
    });
    

    在 foreach 循环结束时,您只会在 $value-&gt;ID; 中获得最后一次迭代值。所以当你在 js 中回显它时。所以它只会回显最后一个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多