如何在每个PHP foreach结果上执行AJAX单击帖子

时间:2017-06-13 09:50:44

标签: javascript php jquery ajax foreach

我已经阅读了多种答案但没有效果。 我尝试做的是让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);
    });
});

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

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

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

4 个答案:

答案 0 :(得分:0)

尝试:

`<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中你已经在循环的最后。

编辑:发表评论

答案 1 :(得分:0)

您需要使用遍历来动态查找每个行值,如此

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->ID;中获得最后一次迭代值。所以当你在js中回应它。所以它只会回显最后一个值。

答案 2 :(得分:0)

所以,为了解释原因,我认为你搞砸了脑子里的一些东西,这会引起混乱。你的PHP文件确实没有在Ajax中发送任何PHP文件。您的PHP文件构建了一个HTML页面,此页面中的Javascript在Ajax中发送数据。

请记住,在PHP中,您构建了一个稍后执行的未来JS代码。如果在Ajax调用期间必须重新获取动态变量或者要发送数据,那将是JS,而不是PHP。

所以像其他人的答案建议一样,你必须在JS中检索id,而不是PHP。

答案 3 :(得分:0)

只有您需要做的就是获得点击后的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