我正在处理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);
}
});
});
答案 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);
猜测这是学校的工作,因此没有给出完整的解决方案...