如何在yii2框架中加载点击内容?

时间:2019-06-21 12:48:11

标签: php jquery ajax yii2

我正在处理yii2项目,我们需要在单击时使用Ajax加载块。 我写了一个Ajax部分,它可以正常工作,但是我被JavaScript卡住了。我的导师说我应该使用.append,但是我找不到方法以某种方式将其与控制器动作链接。

php:

 public function actionGetProjects() {

        $post = Yii::$app->request->post();

                $projects = Project::find()->orderBy('created_at DESC')->limit(15)->offset($post['page']*15)->all();

                if (count($projects)>0) {
                    $this->return['code'] = 200;
                    $this->return['html'] = $this->renderPartial('_projects', [
                            'projects' => $projects
                    ]);
                } else {

                    $this->return['code'] = 404;
                }
        return json_encode($this->return);
    }

UPD:

HTML

<div class="projects">
    <div class="pageHeader">My Projects</div>
    <?php foreach ($projects as $project) {?>
    <a href="project/<?=$project->id?>" class="project-block">


                <img src="<?=$project->projectImages[0] ? '/img/products/'.$project->projectImages[0]->image:''?>">

                <div class="project-title"><?=$project->name?></div>
                <div class="project-address"><?=$project->address?></div>
                <div class="project-readmore">Read more</div>


    </a>
  <?php  } ?>
    <a class="projects-load-btn" href="#">Еще</a>

</div>

新JS:

$(".projects-load-btn").on("click", function(e) {
    event.preventDefault();
    var id = $(this).data("id") || 0;
    $.ajax({
        type: 'POST',
        url: '/ajax/get-projects',
        data: { id: id },
        dataType: "json",
        success: function (data) {
            if(data.code == 200){
                $('.projects').addClass('test');
                $('.projects').html('');
                $('.projects').append(data);
            }
        },
        errors: function (errors) {
            console.log(errors);
        }
    });
});

2 个答案:

答案 0 :(得分:1)

您在配置文件中是否将urlManager的{​​{1}}组件配置为true?

如果是,则yii2使用以下默认路由模板:enablePrettyUrl

在这种情况下,这将导致产生<controller>/<action>网址。

完整的JavaScript代码如下所示:

/ajax/get-projects

答案 1 :(得分:0)

如果我没有记错的话,您不应该通过POST将操作作为变量发送。 这取决于您的Yii2应用程序中的路由设置方式,因此我只是在猜测:

ajax调用:

$.post("Ajax/getProjects", {id:id}, function(data) { ... });

在DOM中添加一些内容

$(".projects").append(jsonResponse.html);

猜测这是学校的工作,因此没有给出完整的解决方案...