将数组的特定元素传递给Joomla 3模块中的Ajax

5
我很确定这很简单,但我已经尝试了很长时间。 我有一个foreach循环,它遍历对象数组并在html表格中显示它们,其中还有一个提交按钮。当单击该按钮时,会进行ajax调用以在同一页面中显示一些数据。
所有这些都很好,但是它只传递foreach循环中最后一个对象的值,而不是该表行中显示的值。 我尝试过使用计数器或为id设置名称,但不确定如何获取特定值并将其传递。以下是我的代码:
<?php 
// No direct access
defined('_JEXEC') or die; ?>

<div class="status shelterbuddydog" >
<table class="profile_table">
   <?php foreach ($animalDetails as $profile):?>
    <tr>
        <td><?php echo $profile->photo;?></td>
        <td><span class="profile">Name:<?php echo $profile->name;?></span><br/>
            <span class="profile">Sex: <?php echo $profile->sex;?></span></<br/>
            <span class="profile">Age: <?php echo $profile->age;?></span><br/>
            <span class="profile">Breed: <?php echo $profile->breed;?></span><br/>
            <span class="profile">Animal Id: <?php echo$profile->animalId;?></span><br/>
            <span class="profile">Location: <?php echo $profile->shelter;?></span><br/>
            <?php $profile->summary;?>
            <input type="submit" id="summary" name="summary" value="VIEW MY PROFILE">
            </input></td>
    </tr>
    <?php endforeach;

</table>
<?php 
// Instantiate global document object

$doc = JFactory::getDocument();

$js = <<<JS

(function ($) {
 $(document).on('click', '#summary', function () {

    var profileSummary = {};
        profileSummary['photo'] = '$profile->photo';
        profileSummary['name'] =  "$profile->name";
        profileSummary['sex']  = "$profile->sex";
        profileSummary['age']  =  "$profile->age";
        profileSummary['breed']  = "$profile->breed";
        profileSummary['shelter']  = "$profile->shelter";
        profileSummary['animalId']  =  "$profile->animalId";
        profileSummary['summary'] =  "$profile->summary";

        request = {
                'option' : 'com_ajax',
                'module' : 'shelterbuddydog',
                'data'   : profileSummary,
                'format' : 'raw'
            };
    $.ajax({
        type   : 'GET',
        data   : request,
        success: function (response) {
            $('.status').html(response);
        }
    });
    return false;
});
})(jQuery)
JS;
$doc->addScriptDeclaration($js);    
?>
</div>

感谢您对此事的任何帮助。
谢谢。

foreach循环结束时,$profile包含数组中的最后一个项目,然后在您的click事件回调中使用它。一种方法是使用jquery直接从dom元素中获取这些值。 - Honza Haering
你真正想要什么还不清楚。 - Narendrasingh Sisodia
他想发送单击提交按钮的行的值。 - Honza Haering
谢谢Honza。你能给我一个如何做的例子吗?你会使用表格行吗? - ozzinet
我在jQuery方面的技能不是很高,但是在回调函数中使用类似$(this).parent()...这样的代码,你就可以选择<span>元素中的值了。 - Honza Haering
1个回答

1
添加隐藏字段,如下所示。
<?php foreach ($animalDetails as $profile):?>
<tr>
    <td><?php echo $profile->photo;?></td>
    <td><span class="profile">Name:<?php echo $profile->name;?></span><br/>
        <span class="profile">Sex: <?php echo $profile->sex;?></span></<br/>

        <input type="submit" class="summary" name="summary" value="VIEW MY PROFILE">
        </input>

         <input type="hidden" class="name" value="<?php echo $profile->name;?>" />
        <input type="hidden" class="sex" value="<?php echo $profile->sex;?>" />

    </td>
</tr>

then

$(document).on('click', '.summary', function () {

var $tr=$(this).parents('tr');

var profileSummary = {};

    profileSummary['name'] =  $tr.find('.name').val();
    profileSummary['sex']  = $tr.find('.sex').val();

    request = {
            'option' : 'com_ajax',
            'module' : 'shelterbuddydog',
            'data'   : profileSummary,
            'format' : 'raw'
        };

alternatively you can bind info with button as well with html5 data attribute

<input class="summary" data-name="<?php echo $profile->name;?>" />


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接