0

我正在尝试制作 2 个列表,其中一个列表根据用户从第一个列表中选择的内容进行更新。

第一个列表由“列表名称”组成......用户制作的每个“列表”都包含许多电影,......

例如,我会列出一个列表:最喜欢的 5 部电影,当我在第二个列表的第一个列表中单击它时,它将显示该列表中的电影列表。

我知道我还需要使用 Ajax 来实现这一点,但我被困住了。我可以从我的数据库中创建第一个列表,但我不知道如何进一步?

<ul class="MyLists">
    <?php
                $MyList = new Lists();
                $res = $MyList->GetMyLists();

                foreach ($res as $r) {
                    echo  "<li><a href='mylists.php?id=".$currentID."&listname".$r['list_name']."'>". $r['list_name'] . "</a></li>";
                }

    ?>
</ul>

<ul class="MyLists">
    <?php
                <li>Here are items of the selected list</li>
    ?>
</ul>

我把用户选择的列表的名称放在“href”部分,你可以告诉我,这样我就可以用 $_GET 方法得到它。但我一直在尝试,但我还没有让这个工作。

此外,任何对有用的 AJAX 技巧的参考都更受欢迎。

提前感谢您的时间。

4

1 回答 1

2

当我做这样的事情时,这是我的方法。

首先在 php 中生成链接时,我给每个链接元素一个数据属性,例如:

<li><a data="<?php echo $id; ?>">List Title</a></li>

$id 可以是任何标识列表及其元素的东西。您可以在 php 方面使用的东西来提取您需要的数据。现在在你的 javascript 和 jQuery 中你可以像这样做一个简单的 ajax 调用:

$(document).ready(function(){
    $('a').click(function(){
        var id = $(this).attr("data");
        $.ajax({
            url: 'getlistitems.php',
            type: 'GET',
            data: {id:id},
            success: function(data){
                  //I'll talk about what goes in here in a bit
            }
        });
    });                
});

让我们分解发生了什么。因此,基本上,当您单击链接元素时,jQuery 会提取您保存在单击的特定链接的数据属性中的内容(使用 $(this)),以便在 ajax 调用中传递给您的 PHP 文件。AJAX 调用的 'url' 参数是将要从数据库中提取数据的 php 文件,或者保存它。'type' 参数是您正在使用的 HTTP 方法。这里的 data 参数是一个 json 对象,它将被放入 $_GET 全局服务器端。

现在在您的 php 文件中,您将使用提供的 id 简单地提取数据,引用如 $_GET['id']。我不知道你的数据是如何保存的,所以我不能在这里非常具体,但你可以在这里轻松地构建一个 MySQL 查询来获取被点击的列表中普遍存在的项目。现在您只需要将这些数据返回到您的客户端浏览器。值得庆幸的是,使用 php 内置的 json_encode() 函数非常容易。只需将所有列表项保存到一个数组中,然后将该数组提供给 json_encode() 并像这样回显它:

$listitems = array();
//add all relevant items to $listitems
echo json_encode($listitems);

现在这就是成功的地方:上面的 ajax 调用中的 function(data){} 参数发挥作用。该 json_encoded($listitems) 参数将是成功回调的数据参数。它甚至变成了一个可供您使用的数组。因此,现在您所要做的就是遍历数据数组并使用 jQuery append将其附加到第二个列表中,您将一切就绪。

于 2013-05-16T17:56:11.113 回答